假设我有 ConcurrentLinkedQueue 类型的类字段。此类的某些方法正在向此队列提供新元素。其他一些方法需要轮询此时队列中的所有元素。

我不能在循环中使用 poll(),因为当循环仍未完成时,某些元素可能会被提供给这个队列。如果新元素的提供速度比我轮询它们的速度快,我认为它甚至可能是一个无限循环。所以我需要某种 pollAll()

有没有办法实现这一目标?也许有一个适合这个的集合?

最佳答案

如果您可以更改您的应用程序以使用 BlockingQueue 实现之一,那么有一种方法 drainTo 似乎完全符合您的要求。它删除队列的当前内容并将它们传输到目标集合。
BlockingQueue 实现有多种;它们都应该是线程安全的。奇怪的是,没有指定 drainTo 是原子的,尽管它在我检查的实现中( ArrayBlockingQueueLinkedBlockingQueue )。

关于Java - ConcurrentLinkedQueue - 轮询所有,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34677680/

10-11 19:29
查看更多