处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。
wait()方法应该在循环调用,因为当线程获取到CPU开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用wait 和 notify 方法的代码:
synchronized (monitor){
//判断条件谓词是否得到满足
while(!locked){
//等待唤醒
monitor.wait();
}
//处理其他的业务逻辑
}
Was this helpful?
0 / 0