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

读取器将使元素出列并将其发送到 REST 服务。

需要注意的是:

  • 每个读者应该使不同的元素出队。如果队列有元素 A、B 和 C,则线程 1 应以并发方式将 A 出列,线程 2 应将 B 出列。依此类推,直到队列中没有任何内容。
  • 我知道总是在繁忙的循环中运行、查看队列中的项目是 CPU 密集型的。所以我不确定阻塞队列是否是一个好的选择。

我有什么选择?

有帮助吗?

解决方案

并发链接队列 或者 链接阻塞队列 我立即想到的有两个选项,具体取决于您是否想要阻止行为。

正如亚当斯基指出的那样, take() 的方法 LinkedBlockingQueue 在等待数据到达时不会不必要地消耗CPU周期。

其他提示

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

另请注意 take() 实现是原子的(例如 LinkedBlockingQueue):如果多个线程被阻塞 take() 然后将单个元素排队 只有一个 线程的 take() 调用将返回;另一个将保持阻塞状态。

ConcurrentLinkedQueue 和 LinkedBLockingQueue 之间的主要区别在于其吞吐量。在中等线程争用的情况下,ConcurrentLinkedQueue 的性能大大优于所有其他 BlockingQueue。然而,在激烈的竞争下,BlockingQueue 是一个稍微更好的选择,因为它会适当地将竞争线程放入等待线程集中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top