我的情况是我有多个生产者和单个消费者。 出于性能原因,我不希望消费者处于任何阻塞状态,但由于可能会有更多的生产者,他们应该阻止"阻止"如果队列已满。
是否有任何队列向我提供此类行为,或者如何根据我的需要修改ArrayBlockingQueue?
答案 0 :(得分:2)
对消费者使用非阻塞ArrayBlockingQueue.poll
,为生产者阻止ArrayBlockingQueue.put
答案 1 :(得分:0)
任何BlockingQueue
实施有什么问题?您的消费者可以调用非阻塞的 peek()
poll()
,并且您的生产者可以调用put(E e)
,如果队列已满,则会阻塞。{/ p>
<强>更新强>
如果队列被用于执行非常密集的任务,那么LMAX's disruptor ring buffer可能是性能最高的排队结构。