通知限制为同步构造

时间:2016-01-30 15:36:33

标签: java notify synchronize

我确实意识到这个话题已在很多地方进行过讨论。但他们都讨论了它在多线程环境中的用法。

在以下示例中,为什么notify()应该被synchronized包围?当使用关键字时,它应该是徒劳的。但是为什么异常java.lang.IllegalMonitorStateException,当它没有被使用时?

public class HelloWorld {
   public static void main(String[] args) {
      ABC c = new ABC();
      c.put(0);
   }
}
class ABC {
   public synchronized void put(int value) {    // why synchronized now!
      System.out.println("Put: " + value);
      notify();
   }
}

1 个答案:

答案 0 :(得分:0)

你应该使用synchronized是因为锁是re-entrant,这意味着它可以被同一个线程多次获取。 换句话说,如果你的线程已经锁定了一个对象,它就不必等待自己。