【发布时间】:2016-02-19 01:00:31
【问题描述】:
我知道只有一个线程会获得监视器锁。 但是在低级别的所有其他 wait() ing 线程会发生什么? (因为他们都被通知了) 他们都会醒来并进入某种昂贵的自旋锁吗? 还是他们会再次回到被锁上的状态? 寻找低级别的细节 - 特别是试图查看 CPU 是否会因此而被消耗?
另外,当一个线程在监视器上等待时,实际的操作系统线程是否在幕后从它那里拿走了? (这样操作系统线程就可以用来做有用的工作了)
【问题讨论】:
-
javadoc 说发生了什么?
-
顾名思义:
notifyAll()将通知(唤醒)所有在特定对象上等待(使用wait())的线程!所有线程都执行wait()之后的下一行 -
我想说,如果这些中的任何一个在您的用例中很重要(性能方面),您就会知道细节。文档建议使用
notifyAll(),所以我建议你继续这样做,不要担心你的 CPU。
标签: java multithreading