哪个线程会通知唤醒?

时间:2017-07-26 08:43:37

标签: java synchronization java-threads

想象一下,我有3个线程有一个等待条件,第四个线程有一个通知条件。

现在,所有3个等待线程都运行并进入等待状态。完成后,第4个线程运行并调用notify一次。

通知如何确定唤醒哪个线程?是调用等待第一个线程的线程,最后调用wait的线程,还是基于其他一些条件?

假设wait和notify使用相同的锁。

2 个答案:

答案 0 :(得分:7)

据我所知,没有特殊记账 - 意味着选择是“随机”的。

所以说javadoc

  

如果有任何线程在等待这个对象,则选择其中一个线程被唤醒。选择是任意的,由实施决定。

因此理论上可能是JVM实现决定制定特定的顺序;但如图所示 - 默认情况下,您不能指望任何订单。所以你不应该编写依赖于这种特定订单的代码。

答案 1 :(得分:0)

请参阅notify()方法的文档。

  

唤醒正在此对象监视器上等待的单个线程。如果   任何线程都在等待这个对象,其中一个被选中   惊醒。 选择是任意的,由酌情决定   实施