哪个线程会通知唤醒?

Jit*_* KS 6 java synchronization java-threads

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

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

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

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

Gho*_*ica 8

据我所知,没有特殊的簿记 - 意味着选择是"随机"的.

所以说javadoc:

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

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