2012-05-10 40 views
4

没有人知道一个有界的循环队列(开放源代码)的实现,还是一个内置于android/java的可用API类?android/java - 寻找一个高效的并发循环队列

我为这个集合所需的并发(不同步或基于锁的)操作至少是入队和出队,但入队也是足够的。

对于那些谁不知道收集我所需要的,这里有更多的一些信息:

  • 界 - 有项目,可以在它的最大数量。
  • 并发 - 允许多个线程高效地运行操作,无需任何形式的锁定。这与同步解决方案相反,它只允许单个线程运行操作。
  • 循环 - 如果我们将项目放入已填充的集合中,则新项目将替换最早的项目。

请帮助

+0

听起来你应该只是复制'ArrayBlockingQueue.java'(它在框架源代码中可用),并改变'#offer(T)'和'#put(T)'方法使最后一项出队 - 并且presto - 即时有界队列,驱逐最后一个项目。 – Jens

+0

@Jens - ArrayBlockingQueue不允许多个线程同时访问,由源判断。 – mcfinnigan

+0

正确。不仅如此,它也不是循环的:如果您尝试将物品放入已填充的队列中,它将一直等到物品未填满为止,而相反 - 如果您尝试从物品中取出物品一个空的队列,它会一直等到它不是空的。 –

回答

0

你描述听起来很像disruptor,但它是一个外部库,而不是内置的。据我所知,目前还没有内置的Java标准环形缓冲区的数据结构图书馆。

+0

正确。它看起来很相似。你认为这正是我需要的吗?他们有使用示例代码吗?如果是这样,我会给你一个V。 :) –

+0

[技术描述文档](http://disruptor.googlecode.com/files/Disruptor-1.0.pdf)[PDF]的第4.7点中有一个代码示例以及[在wiki中](http ://code.google.com/p/disruptor/wiki/CodeExampleDisruptor2x)。无论干扰者是否正是你所需要的,只有你可以告诉:) –

+0

示例代码看起来与队列的真实内容没有任何相似之处。另外,我不确定BatchHandler,batchConsumer,ConsumerBarrier和ProducerBarrier的目的是什么。请好好展示一些实现使用这个库的入队和出队方法的代码? –