多线程例子,求解,是否是线程安全的?该怎么处理
阅读
因为要做一个队列,所以写了下面的代码。求大师给讲解一下。
1.set,get方法还需要不需要synchronized了?
2.AllTimeQueue 作为多线程中的单例模式应用,getInstance()方法是不是有必要加synchronized?不是已经进行了final定义gatqInstance了么?
3.BlockingQueue<Long> timeNow是否可以定义为public,这个不是线程安全的队列吗?把域暴露出来应该也没有什么问题吧?
public class AllTimeQueue {
private final static GameAllTimeQueue gatqInstance = new GameAllTimeQueue();
private BlockingQueue<Long> timeNow = new LinkedBlockingQueue<Long>();
private GameAllTimeQueue(){}
public synchronized GameAllTimeQueue getInstance(){
return gatqInstance;
}
public synchronized void set(BlockingQueue<Long> bq){
timeNow = bq;
}
public synchronized BlockingQueue<Long> get(){
return timeNow;
}
}
------解决方案--------------------
set要加synchronized
------解决方案--------------------
BlockingQueue线程安全,所以不需要顺序,就都不用加
------解决方案--------------------
1.set,get方法还需要不需要synchronized了?
这种set get 没有意义,怎么搞都不是线程安全的。
public void set(Long id){ 这样是安全的,不需要加sync
timeNow.add(id);
}
2.AllTimeQueue 作为多线程中的单例模式应用,getInstance()方法是不是有必要加 synchronized?不是已经进行了final定义gatqInstance了么?
应该不会有安全问题,(不过最新研究,说是有问题)
3.BlockingQueue<Long> timeNow是否可以定义为public,这个不是线程安全的队列吗?把域暴露出来应该也没有什么问题吧?
如放开的话,我就可以这么用:
AllTimeQueue.getInstance().timeNow = null;
大家都爽了。
------解决方案--------------------
哦,那就给分吧。。。
------解决方案--------------------
哦。基本上可以吧。 没太大问题。
------解决方案--------------------
1 无所谓好坏,能满足需求就行。
2 面对问题解决问题,才是最好的进步
阅读
上一篇:关于AOP的日志记录功能解决方案 下一篇:返回列表