0

考虑这部分代码:

synchronized(object) {

    ....

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

    // do something else
    doSomethingElse();

}

Java 语言规范或 API 注释或其他文档是否阐明了这种情况下的预期行为?

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

4

1 回答 1

1

线程将立即收到通知,但它们在获得对监视器的控制权之前不会执行,而这只能在当前正在执行的线程通过离开synchronized块而放弃对监视器的控制权之后发生。

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

于 2013-06-11T22:42:02.623 回答