虽然有很多关于这个主题的文章和SO帖子,我仍然有一些疑问。所以请帮助我理解。说我写:对象等待()和通知()重访
1.Class A(){}
2.public static void main(String[] s){
3. A obj= new A();
4. synchronized(obj){
5. while(!condition)
6. obj.wait();
7. }
8.}
现在根据解释,如果我们不使用同步块,线程从睡眠唤醒可能会松动通知。但第6行释放了对obj的锁定,即其监视器由另一个线程拥有。 现在,当该线程调用notify()时,由于obj的监视器不属于此线程,因此该线程如何得到通知。此外,第4行代码只执行一次,而不是此线程的每个唤醒事件。那么wait()之前同步的是什么?
编辑:“第4行代码只执行一次”错误的假设。在answer.Thanks
如果不使用synchronized块,'wait'会抛出异常下手......(和'wait'只有重新获得监视器后返回。) –