需要一个可以支持多个读者的队列
-
07-07-2019 - |
题
我需要一个可以由多个读者处理的队列。
读取器将使元素出列并将其发送到 REST 服务。
需要注意的是:
- 每个读者应该使不同的元素出队。如果队列有元素 A、B 和 C,则线程 1 应以并发方式将 A 出列,线程 2 应将 B 出列。依此类推,直到队列中没有任何内容。
- 我知道总是在繁忙的循环中运行、查看队列中的项目是 CPU 密集型的。所以我不确定阻塞队列是否是一个好的选择。
我有什么选择?
其他提示
从您的问题描述中我不确定线程是否需要以严格的循环方式使元素出队。假设这不是您可以使用的限制 BlockingQueue
的 take()
方法,这将导致线程阻塞,直到数据可用(因此 不消耗CPU 周期)。
另请注意 take()
实现是原子的(例如 LinkedBlockingQueue
):如果多个线程被阻塞 take()
然后将单个元素排队 只有一个 线程的 take() 调用将返回;另一个将保持阻塞状态。
ConcurrentLinkedQueue 和 LinkedBLockingQueue 之间的主要区别在于其吞吐量。在中等线程争用的情况下,ConcurrentLinkedQueue 的性能大大优于所有其他 BlockingQueue。然而,在激烈的竞争下,BlockingQueue 是一个稍微更好的选择,因为它会适当地将竞争线程放入等待线程集中。
不隶属于 StackOverflow