[英]Notify restricted to synchronized construct
我的确意识到这个话题已经在很多地方讨论过了。 但是所有人都谈论它在多线程环境中的用法。
在下面的示例中,为什么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();
}
}
您应该使用synchronized
是因为锁是可re-entrant
,这意味着同一线程可以多次获取它。 换句话说,如果您的线程已经持有对象的锁,则不必等待它自己。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.