尽管有很多关于这个主题的文章和 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 行代码只执行一次,而不是在该线程的每个唤醒事件上执行。那么在等待()之前需要同步什么?
编辑:“第 4 行代码只执行一次”错误假设。同步块中的线程在从睡眠中恢复后重新获取锁,如答案中所述。谢谢