T1:
synchronized(sharedMonitor){
sharedMonitor.notify();
}
T2:
while(someCondition){
//Point1
synchronized(sharedMonitor){
sharedMonitor.wait();
}
}
如果T2对someCondition求值发现为true,在Point1,线程调试器可能切换到了T1,而T1调用notify(),当T2再次执行的时候,会进入wait(),此时notify信号已经错过,因此T2将无限等待这个已经发送过的信号,造成死锁。
解决方法 在T2中把synchronized放在最前。