在退出synchronized块之前通知()/ NotifyAll()

时间:2013-06-11 22:40:24

标签: java multithreading concurrency thread-safety

考虑这部分代码:

synchronized(object) {

    ....

    object.notify(); // or object.notifyAll();

    // do something else
    doSomethingElse();

}

Java语言规范或API评论或其他一些文档是否澄清了这种情况下的预期行为?

是否会立即通知其他线程,或仅在执行离开同步块时通知?

1 个答案:

答案 0 :(得分:1)

线程将立即得到通知,但在获得对监视器的控制之后才会执行,而这只能在当前执行的线程通过离开synchronized块放弃对监视器的控制之后才会执行。 / p>

例外情况是,当前线程有权访问监视器,通过调用wait()来控制。在这种情况下,监视器上等待的任何其他线程(包括通过对notify()notifyAll()的任何调用唤醒的线程)都可以获得对监视器的控制并使原始线程处于等待状态。