需要一个可以支持多个读者的队列

Jac*_*ine 3 java queue concurrency multithreading

我需要一个可以由多个读者处理的队列.

读者将一个元素出列并将其发送到REST服务.

重要的是要注意:

  • 每个读者都应该出列不同的元素.如果队列具有元素A,B和C,则线程1应该出队A并且线程2应该以并发方式出队B. 等等,直到队列中没有任何内容.
  • 我知道总是在繁忙的循环中运行,窥视项目的队列是CPU密集型的.所以我不确定阻塞队列是否是一个不错的选择.

我有什么选择?

Amb*_*ber 8

ConcurrentLinkedQueueLinkedBlockingQueue是两个立即想到的选项,具体取决于您是否需要阻止行为.

正如Adamski所说,在等待数据到达时,该take()方法LinkedBlockingQueue不会不必要地烧掉cpu周期.


Ada*_*ski 7

我不确定你的问题描述是否需要以严格的循环方式将元素出列.假设这不是一种限制可以使用BlockingQueuetake()方法,这将导致线程阻塞,直到数据是可用的(因此不消耗CPU周期).

还要注意take()实现是原子的(例如LinkedBlockingQueue):如果多个线程被阻塞take()并且单个元素被排队,则只返回一个线程的take()调用; 另一个将被阻止.