5

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

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

我在某处读到它,使用java.concurrent库和CountDownLatch用于信令更有效。我也检查了concurrent.locks.Condition,但是这个主题指出它只是一个(程序员方面)更安全和更通用的构造,与notify/notifyAll. Peter Lawrey 建议使用并发库而不是notify-notifyAll评论中,所以现在我很困惑什么是最佳实践。

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

4

2 回答 2

3

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

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

于 2012-08-23T12:25:29.087 回答
0

wait-notify很好。

notify由于等待列表中只有一个线程,因此和之间在语义或性能方面没有区别notifyAll

于 2012-08-24T15:41:33.737 回答