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

Tho*_*alc 5 java performance multithreading android

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

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

我在某处读到了使用java.concurrent库和CountDownLatch信令的效率更高.我也检查了concurrent.locks.Condition,但是这个主题声明它只是一个(程序员方面的)更安全和通用的结构,与之相比没有性能优势notify/notifyAll.彼得Lawrey建议使用并发库,而不是notify-notifyAll这个意见,所以现在我感到困惑的是要使用的最佳实践.

一个相关的问题:哪个性能更好,notify或者notifyAll在我的情况下(即如果我有一个线程)?我知道有很多类似的线索,但没有一个给出明确的答案.在我的情况下,功能上,我使用哪个并不重要,但我想知道哪个更快.

Tud*_*dor 3

在我看来,它们在“性能方面”没有太大区别,因为它们都挂起调用相应线程的线程wait,因此底层机制很可能非常相似。无论如何,为什么性能如此重要?除非您有一些极快的等待/信号模式,其中信号在等待后立即出现,使得上下文切换过于昂贵并且可能需要自旋锁,否则无需担心性能。

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

  • @Thomas Calc:我正在浏览源代码,但很难从那里判断哪个更有效,因为它最终会跳转到本机方法。您只需要搜索这些机制的基准或自己做一个。然而,即使是每秒一个信号,我仍然认为差异并不重要。 (2认同)