有时我需要醒来或发送一个单个线程,我想知道最好和最有效的方法是什么。
第一个解决方案是与wait-notify
结合的信令(我知道如何正确实现这种模式,这不是问题)。
我在某处读到了使用 java.concurrent 库和CountDownLatch
进行信号传递的效率更高。我也检查了concurrent.locks.Condition,但是this主题表明它只是一个(程序员)更安全和通用的结构,与notify/notifyAll
相比没有性能优势。 Peter Lawrey建议在this注释中使用 Concurrency 库而不是notify-notifyAll
,所以现在我很困惑什么是最佳实践。
一个相关的问题:在我的情况下哪个性能更好,notify
或notifyAll
(即如果我有一个帖子)?我知道有很多类似的线索,但没有一个给出明确的答案。就我而言,在功能上,我使用哪个并不重要,但我想知道哪个更快,那么。
答案 0 :(得分:3)
IMO他们在“性能方面”没有太大区别,因为它们都会挂起调用相应wait
的线程,因此很可能底层机制非常相似。为什么表演无论如何都会如此重要?除非你有一些非常快速的等待/信号模式,其中信号在等待之后立即,使得上下文切换太昂贵并且可能需要螺旋锁,所以不必担心性能。 / p>
您应该以编程方式实现您认为最方便的方法,然后进行基准测试,看看您是否真的需要更高效的方法。
答案 1 :(得分:0)
wait-notify
完全没问题。
因为等待列表中只有一个线程,所以notify
和notifyAll
之间没有区别,语义或性能。