我有一个消费者线程从 LinkedBlockingQueue
中获取元素,并在它为空时手动使其 hibernate 。我使用 peek()
来查看队列是否为空,因为我必须在将线程发送到 sleep 状态之前执行一些操作,并且我使用 queue.wait()
来执行此操作。
因此,当我在另一个线程中并向队列中add()
一个元素时,是否会自动通知正在 wait()
上的线程队列?
最佳答案
是的,确实如此。或者更确切地说,它使用更高效的内部锁对象而不是外部队列对象的锁;如果您想 hibernate 直到有东西到达队列,请执行阻塞 take()
。 (如果您在等待时还有其他事情要做,请考虑阻塞队列是否是从其他地方接收消息的正确方法。)
关于java - LinkedBlockingQueue 上的 add() 是否通知等待线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2986386/