繁体   English   中英

如果不在同步块中使用wait和notify方法会发生什么? 它有用吗?

[英]what happen if using wait and notify methods not in a synchronized blocks ? is it useful?

有关同步的两个问题

  1. 如果在非同步块中使用wait和notify方法会怎样? 有用吗?
  2. 同步对象是否应该与wait方法的对象相同? 我可以这样:

     synchronized (o) { try { this.wait(); } catch (InterruptedException e) { } } 
  1. 如果当前线程在调用对象的wait()notify()方法之前未能在对象上synchronize ,则抛出IllegalThreadStateException 因此,不,它没有用。

  2. 是的,重申以上内容,线程必须在调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM