我有一个情况,我有多个生产者和一个消费者。出于性能原因,我不希望消费者处于任何阻塞状态,但由于可以有更多的生产者,如果队列已满,他们应该“阻塞”。
是否有任何队列为我提供这种行为,或者我如何根据需要修改 ArrayBlockingQueue?
ArrayBlockingQueue.poll
对消费者使用非阻塞ArrayBlockingQueue.put
,对生产者使用阻塞
任何BlockingQueue
实现有什么问题?如果队列已满,您的消费者可以调用哪个是非阻塞的,而您的生产者可以调用哪个阻塞。peek()
poll()
put(E e)
更新
如果队列被用于非常密集的任务,那么LMAX 的中断环缓冲区可能是性能最高的队列结构。