非线程安全的ArrayBlockingQueue

时间:2011-10-05 09:57:51

标签: java

我正在寻找一个类似于ArrayBlockingQueue的库。就是这样,我不需要提供线程安全功能(为了更好的性能),因为它在ReentrantLock方法中使用offer(E e)

我想要的是

  1. FIFO队列。
  2. 具有初始容量,如果队列已满,则推送新元素将失败。
  3. 不要求线程安全。
  4. 我在Java标准库中找不到ArrayQueue。或者,我错过了任何课程吗?

5 个答案:

答案 0 :(得分:1)

BoundedFiFoBuffer中有一个Common.Collections,其中包含以下属性:

  • BoundedFifoBuffer是一个非常有效的Buffer实现,具有固定的大小。

  • BoundedFifoBuffer的删除顺序基于插入顺序;元素的删除顺序与添加元素的顺序相同。

  • 迭代顺序与删除顺序相同。

  • 请注意,此实现未同步。

  • 尝试将元素添加到完整缓冲区时抛出BufferOverflowException。

答案 1 :(得分:1)

只需使用ArrayList并在添加时检查“完整性”吗?或者围绕它编写简单的包装。

答案 2 :(得分:0)

使用ConcurrentLinkedQueue(有关详细信息,请参阅http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html

答案 3 :(得分:0)

http://commons.apache.org/collections/api-2.1.1/org/apache/commons/collections/BoundedFifoBuffer.html应该符合您的需求。要小心,因为它总是从add返回true,而是在你超出界限时抛出

答案 4 :(得分:0)

我会使用ArrayBlockingQueue,除非你知道它不够快。如果每秒发送数百万个对象,可以考虑对它们进行批处理以减少开销。如果你每秒只有几十万,那就不太重要了。