处于等待状态的线程可能会收到错误警报和伪唤醒,如果不在循环中检查等待条件,程序就会在没有满足结束条件的情况下退出。

wait()方法应该在循环调用,因为当线程获取到CPU开始执行的时候,其他条件可能还没有满足,所以在处理前,循环检测条件是否满足会更好。下面是一段标准的使用wait 和 notify 方法的代码:

synchronized (monitor){
    //判断条件谓词是否得到满足
    while(!locked){
        //等待唤醒
        monitor.wait();
    }
    //处理其他的业务逻辑
}

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.