我想知道为什么线程从Java中的wait()自发地唤醒。
这是设计决定吗?这是妥协吗?

编辑:(摘自Java Concurrency in Practice,第300页)



作者进一步指出:



这就是为什么您总是必须像这样编写代码的原因

synchronized(this){
    while(!condition)
        wait();
    }
}

永不
synchronized(this){
    if(!condition){
        wait();
    }
}

即使条件仅从falsetrue

最佳答案

这些自发的唤醒也称为“虚假唤醒”。在Java规范中,jvm实现允许(尽管不鼓励)虚假唤醒。

之所以允许使用它们,是因为许多实现可能基于具有这种行为的pthread(POSIX线程)。为什么?

Wikipedia:

关于java - 为什么线程自发地从wait()中唤醒?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2540984/

10-12 23:54