wait() 方法应该在循环调用,因为当线程获取到 CPU 开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用 wait 和 notify 方法的代码:
synchronized
(obj) {
while
(condition does not hold)
obj.wait();
// (Releases lock, and reacquires on wakeup)
...
// Perform action appropriate to condition
}