2012-05-10 57 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的目的是什麼。請好好展示一些實現使用這個庫的入隊和出隊方法的代碼? –