我需要帮助理解使用CountDownLatch相比于传统的等待-通知机制的优势。我认为notifyAll()确实可以做到同样的事情,而且似乎更容易使用(可能是因为熟悉)。另外,wait()和CountDownLatch中的await()有什么区别?谢谢!
编辑: 我想重新表达我的问题:
根据文档,await()的作用是: 导致当前线程等待,直到计数器归零,除非线程被中断。
对我来说,很难看出wait()和await()之间的区别-await()在底层确实使用了wait(),并且似乎在计数达到零时有一个隐式的notifyAll()。
我的问题是,为什么我不应该只使用自己的计数变量处理的等待-通知机制,而要选择CountDownLatch呢?
编辑: 我想重新表达我的问题:
根据文档,await()的作用是: 导致当前线程等待,直到计数器归零,除非线程被中断。
对我来说,很难看出wait()和await()之间的区别-await()在底层确实使用了wait(),并且似乎在计数达到零时有一个隐式的notifyAll()。
我的问题是,为什么我不应该只使用自己的计数变量处理的等待-通知机制,而要选择CountDownLatch呢?
wait()
之前调用了notifyAll()
,那么线程A将永远等待;但是如果线程B在线程A调用await()
之前调用了countDown()
,那么线程A将继续执行而不需要等待。 - yshavit