Java - ConcurrentLinkedQueue - 轮询所有

coo*_*guy 4 java collections

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

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

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

Stu*_*rks 5

如果您可以更改您的应用程序以使用其中一种BlockingQueue实现,那么有一种方法drainTo似乎完全符合您的要求。它删除队列的当前内容并将它们传输到目标集合。

有多种BlockingQueue实现方式;它们都应该是线程安全的。奇怪的是,它没有指定drainTo是原子的,尽管它在我检查过的实现中(ArrayBlockingQueueLinkedBlockingQueue)。