T1:
synchronized(shareMonitor){
<setup condition for T2>
shareModitor.notify();
}
T2:
while(someCondition){
//Point1
synchronized(shareMonitor){
shareMonitor.wait();
}
}
以上代码存在死锁情况。假若T2计算条件值为true,在Point1中,线程调度器可能切换到T1。而T1将执行其设置,然后调用notify()。当T2得以继续执行,此时对T2来说,实际已经太晚,以至于不能意识到这个条件已经变化,因此会盲目的进入wait()一直等待下去,导致死锁。
对此的解决方法如下:
T1:
synchronized(shareMonitor){
<setup condition for T2>
shareModitor.notify();
}
T2:
synchronized(shareMonitor){
while(someCondition){
shareMonitor.wait();
}
}