通知单个线程:notify,notifyAll或concurrent.locks.Condition?

时间:2012-08-23 10:48:46

标签: java android multithreading performance

有时我需要醒来或发送一个单个线程,我想知道最好和最有效的方法是什么。

第一个解决方案是与wait-notify结合的信令(我知道如何正确实现这种模式,这不是问题)。

我在某处读到了使用 java.concurrent 库和CountDownLatch进行信号传递的效率更高。我也检查了concurrent.locks.Condition,但是this主题表明它只是一个(程序员)更安全和通用的结构,与notify/notifyAll相比没有性能优势。 Peter Lawrey建议在this注释中使用 Concurrency 库而不是notify-notifyAll,所以现在我很困惑什么是最佳实践。

一个相关的问题:在我的情况下哪个性能更好,notifynotifyAll(即如果我有一个帖子)?我知道有很多类似的线索,但没有一个给出明确的答案。就我而言,在功能上,我使用哪个并不重要,但我想知道哪个更快,那么。

2 个答案:

答案 0 :(得分:3)

IMO他们在“性能方面”没有太大区别,因为它们都会挂起调用相应wait的线程,因此很可能底层机制非常相似。为什么表演无论如何都会如此重要?除非你有一些非常快速的等待/信号模式,其中信号在等待之后立即,使得上下文切换太昂贵并且可能需要螺旋锁,所以不必担心性能。 / p>

您应该以编程方式实现您认为最方便的方法,然后进行基准测试,看看您是否真的需要更高效的方法。

答案 1 :(得分:0)

wait-notify完全没问题。

因为等待列表中只有一个线程,所以notifynotifyAll之间没有区别,语义或性能。