java - LinkedBlockingQueue 上的 add() 是否通知等待线程?

标签 java multithreading locking queue

我有一个消费者线程从 LinkedBlockingQueue 中获取元素,并在它为空时手动使其 hibernate 。我使用 peek() 来查看队列是否为空,因为我必须在将线程发送到 sleep 状态之前执行一些操作,并且我使用 queue.wait() 来执行此操作。

<小时/>

因此,当我在另一个线程中并向队列中add()一个元素时,是否会自动通知正在 wait() 上的线程队列?

最佳答案

是的,确实如此。或者更确切地说,它使用更高效的内部锁对象而不是外部队列对象的锁;如果您想 hibernate 直到有东西到达队列,请执行阻塞 take()。 (如果您在等待时还有其他事情要做,请考虑阻塞队列是否是从其他地方接收消息的正确方法。)

关于java - LinkedBlockingQueue 上的 add() 是否通知等待线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986386/

相关文章:

java - 重绘的多参数版本如何在 Java 中工作?

Ruby rake 任务线程优化

excel - 插入行时防止公式引用更新

Linux try_cmpxchg神秘的内联汇编

java - 创建情绪分析工具

java - 寻找开源图标库

android - 从 Android 中的事件产生的顺序线程

.net - Windows关闭时,正在运行的.NET线程引发什么异常?

c - 同步原语的简单/规范实现?

java - 实现产品 key