【发布时间】:2019-11-18 20:21:15
【问题描述】:
我正在阅读有关 Java 中使用 wait/notify/notifyAll 的线程间通信。
我通过了这个答案:https://stackoverflow.com/a/36276832
有 2 个线程和 1 个主线程。主线程做notifyAll。它唤醒剩余的 2 个线程,并且两个线程都打印
":syncronized block have finished"
但是我读到如果有 2 个线程在等待一个锁,notifyAll 会唤醒每个线程,但锁只会被 1 个线程获取。
所以我的问题是 t1 和 t2 线程是如何完成它们的执行的?
当我从lock.notifyAll(); 更改为lock.notify(); 时,Java 程序永远不会结束。
t1/t2 中的一个线程将处于等待状态。
有人可以回答吗?如果没有理解清楚,我可以进一步解释我的疑问。
简单的问题:如果2个线程在等待同一个锁,而第3个线程做notifyAll,只有一个得到锁,另一个保持等待状态,所以在上面的情况下,怎么两个线程都能完成执行?
【问题讨论】:
-
一旦线程一释放锁,线程二得到它。
-
但是线程1没有调用notify,怎么唤醒的?
标签: java multithreading wait synchronized