【发布时间】:2012-06-25 20:34:42
【问题描述】:
我对同步实例方法和静态方法感到困惑。 我想写一个线程安全的类如下:
public class safe {
private final static ConcurrentLinkedQueue<Object> objectList=
new ConcurrentLinkedQueue<Object>();
/**
* retrieves the head of the object and prints it
*/
public synchronized static void getHeadObject() {
System.out.println(objectList.peek().toString());
}
/**
* creates a new object and stores in the list.
*/
public synchronized void addObject() {
Object obj=new Object();
objectList.add(obj);
}
}
在静态方法上同步将锁定 safe.class 锁,而在实例方法上同步将在 this 上锁定。因此会达到不一致的状态。
如果我想为下面的代码 sn-p 实现一致的状态,如何实现?
【问题讨论】:
-
为什么
addObject是实例方法?为什么不是静态的?无论如何,您为什么要围绕并发对象进行同步?它们已经是线程安全的。 -
状态不一致是什么意思?
-
我假设他的意思是
Queue<Object> objectList = new List<Object>而不是ConcurrentLinkedQueue<Object> objectList = new ConcurrentLinkedQueue<Object>所以我们得到了他所问实际问题的答案。
标签: java thread-safety