![](/img/trans.png)
[英]Using `synchronized` code blocks with `.wait` and `.notify` in Java
[英]what happen if using wait and notify methods not in a synchronized blocks ? is it useful?
有关同步的两个问题
同步对象是否应该与wait方法的对象相同? 我可以这样:
synchronized (o) { try { this.wait(); } catch (InterruptedException e) { } }
如果当前线程在调用对象的wait()
或notify()
方法之前未能在对象上synchronize
,则抛出IllegalThreadStateException
。 因此,不,它没有用。
是的,重申以上内容,线程必须在调用wait()
或notify()
的同一实例上进行synchronize
。 因此,该示例仅在o == this
。
自从引入java.util.concurrent
以来,我没有找到使用wait()
和notify()
充分理由,现在synchronized
也不再有用。 我向初学者(易于使用)和高级(更强大,更正确)的程序员推荐该软件包中的高级工具。
1.您不能在synchronized
块之外调用wait()
或notify()/notifyAll()
,这些块在方法调用所属的对象上进行同步。 如果尝试,将收到IllegalMonitorStateException
。
2.您需要在wait()/notify()/notifyAll()
调用所属的同一对象上进行同步。 例如,您的代码将按编写的方式抛出IMSE。 您将改为调用synchronized(this){ ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.