Синхронизация по статическому методу и методу экземпляра

Я запутался в синхронизации метода экземпляра и статического метода. Я хочу написать потокобезопасный класс следующим образом:

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, а синхронизация метода экземпляра заблокирует эту блокировку и, следовательно, будет достигнуто несогласованное состояние.

Если я хочу добиться согласованного состояния для приведенного ниже фрагмента кода, как этого можно достичь?

5
задан Bill the Lizard 15 October 2012 в 13:04
поделиться