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

时间:2010-06-06 23:42:16

标签: java multithreading locking queue

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


所以,当我在另一个线程和add()队列中的元素时,是否会自动通知队列中wait()的线程?

1 个答案:

答案 0 :(得分:2)

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