我想知道为什么线程从Java中的wait()自发地唤醒。
这是设计决定吗?这是妥协吗?
编辑:(摘自Java Concurrency in Practice,第300页)
作者进一步指出:
这就是为什么您总是必须像这样编写代码的原因
synchronized(this){
while(!condition)
wait();
}
}
永不
synchronized(this){
if(!condition){
wait();
}
}
即使条件仅从
false
到true
。 最佳答案
这些自发的唤醒也称为“虚假唤醒”。在Java规范中,jvm实现允许(尽管不鼓励)虚假唤醒。
之所以允许使用它们,是因为许多实现可能基于具有这种行为的pthread(POSIX线程)。为什么?
Wikipedia:
关于java - 为什么线程自发地从wait()中唤醒?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2540984/