【发布时间】:2010-03-29 20:20:12
【问题描述】:
我想知道为什么线程会自发地从 java 中的 wait() 中唤醒。
这是一个设计决定吗?是妥协吗?
编辑:(来自 Java 并发实践,第 300 页)
wait甚至被允许返回 “虚假地”——不回应任何 线程调用通知。
作者进一步指出:
这就像一个松散的烤面包机 使铃声响起的连接 当吐司准备好时 有时它还没有准备好。
这就是为什么你总是必须像这样编写代码的原因
synchronized(this){
while(!condition)
wait();
}
}
永远不会
synchronized(this){
if(!condition){
wait();
}
}
即使条件仅从
false 到 true。
【问题讨论】:
-
不,请参考我的编辑..
-
好吧,我删除了我的评论,因为看起来你是对的。
标签: java concurrency multithreading