考虑这部分代码:
synchronized(object) {
....
object.notify(); // or object.notifyAll();
// do something else
doSomethingElse();
}
Java语言规范或API评论或其他一些文档是否澄清了这种情况下的预期行为?
是否会立即通知其他线程,或仅在执行离开同步块时通知?
答案 0 :(得分:1)
线程将立即得到通知,但在获得对监视器的控制之后才会执行,而这只能在当前执行的线程通过离开synchronized
块放弃对监视器的控制之后才会执行。 / p>
例外情况是,当前线程有权访问监视器,通过调用wait()
来控制。在这种情况下,监视器上等待的任何其他线程(包括通过对notify()
或notifyAll()
的任何调用唤醒的线程)都可以获得对监视器的控制并使原始线程处于等待状态。