Tag: blockqueue

如何立即释放等待BlockingQueue的线程

考虑一个BlockingQueue和几个等待poll(long, TimeUnit)线程poll(long, TimeUnit) (也可能在on take() )。 现在队列是空的,并且希望通知等待的线程他们可以停止等待。 预期的行为是返回null或抛出声明的InterruptedException 。 由于线程正在等待内部锁, Object.notify()将无法用于Object.notify() 。 有任何直截了当的方式吗?

如何并行等待多个阻塞队列?

我有两个独立的阻塞队列。 客户端通常使用第二个阻塞队列中的第一个来检索要处理的元素。 在某些情况下,客户端对两个阻塞队列中的元素感兴趣,无论哪个队列首先提供数据。 客户端如何同时等待这两个队列?

ArrayBlockingQueue使用单个锁进行插入和删除,但LinkedBlockingQueue使用2个单独的锁

我正在浏览ArrayBlockingQueue和LinkedBlockingQueue的源代码。 LinkedBlockingQueue有一个putLock和一个takeLock分别用于插入和删除,但ArrayBlockingQueue只使用1个锁。 我相信LinkedBlockingQueue是基于简单,快速,实用的非阻塞和阻塞并发队列算法中描述的设计实现的 。 在本文中,他们提到他们保留一个虚拟节点,以便入队者永远不必访问头部,而且出队员永远不必访问尾部,这避免了死锁情况。 我想知道为什么ArrayBlockingQueue没有借用相同的想法并使用2个锁而不是。