为什么线程会自发地从 wait() 中唤醒?
我想知道为什么线程自发地从java中的wait()中唤醒。
这是一个设计决策吗?这是一种妥协吗?
编辑:(摘自 Java 并发实践,第 300 页)
wait
甚至允许“虚假地”返回 - 而不是响应任何线程调用通知。
此外,作者指出:
这就像一个连接松动的烤面包机,当吐司准备好时,铃铛会响起,但有时也会在它还没有准备好的时候响起。
这就是为什么你总是需要像这样编码
synchronized(this){
while(!condition)
wait();
}
}
从不
synchronized(this){
if(!condition){
wait();
}
}
即使条件仅从 转换为 。false
true