我知道只有一个线程会获得监视器锁定。 但是在低级别的所有其他wait()线程会发生什么? (因为他们都被通知) 他们都会醒来并进入某种昂贵的旋转锁吗? 或者他们会再次回到被锁定的状态? 寻找低级别的细节 - 特别是试图查看CPU是否会被消耗?
当一个线程在监视器上等待时,实际的OS线程是否在幕后被带走? (这样OS线程可以用来做有用的工作)
答案 0 :(得分:1)
相关问题的答案并未具体解决这些问题。
通知notifyAll的线程被唤醒,然后他们尝试获取他们被阻塞等待的锁(以及任何想要获取锁的新到线程)。调度员选择胜利者,失败者再次回到阻止状态。
OS线程不会从Java线程对象(操作系统级别的线程块)中重新分配。您可以通过在性能监视工具中查看线程来确认这一点。调度和阻塞都发生在操作系统级别(绿色线程除外,其中线程由JVM模拟)。