Я запутался в синхронизации метода экземпляра и статического метода. Я хочу написать потокобезопасный класс следующим образом:
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, а синхронизация метода экземпляра заблокирует эту блокировку и, следовательно, будет достигнуто несогласованное состояние.
Если я хочу добиться согласованного состояния для приведенного ниже фрагмента кода, как этого можно достичь?