我有一个消费者线程从LinkedBlockingQueue
获取元素,并且当它为空时我会手动休眠。我使用peek()
查看队列是否为空,因为我必须在将线程发送到睡眠状态之前执行操作,并且我使用queue.wait()
执行此操作。
所以,当我在另一个线程和add()
队列中的元素时,是否会自动通知队列中wait()
的线程?
答案 0 :(得分:2)
是的。或者更确切地说,它确实使用了更高效的内部锁定对象而不是外部队列对象的锁定;如果你想睡觉直到某些东西进入队列,请进行阻止take()
。 (如果您在等待时还有其他事情要做,请考虑阻塞队列是否是从其他地方接收消息的正确方法。)