2012-12-21 60 views
-3
protected BlockingQueue<DataPack> queue = new ArrayBlockingQueue<DataPack>(1024); 

我一直在使用上面的代碼很長一段時間,我從來沒有完全理解它,我的意思是我知道如何使用它來做我所需要的但我不知道arrayblockingqueue和可能存在的類型之間的區別,所以有人會解釋這一點,並解釋何時使用它們。你也不介意給我一些關於這個和更好的替代品的速度,如果有的話,有沒有機會我會失去數據? (我會丟失一些數據,但我carnt失去像數據的10%被共享。)使用阻塞隊列在線程之間共享數據問題

感謝

+1

*「arrayblockingqueue和可能有的類型之間的區別」*有點寬泛。你的意思是與其他BlockingQueues進行比較? – assylias

+5

閱讀javadoc。這裏都有解釋。 –

回答

0

你不會丟失任何數據。該隊列存在於進程中,只保存由一個線程插入的對象引用,並由另一個線程佔用。這是一個普通的Java集合,但具有同步的(線程感知/線程安全的)增變器。

就速度而言,我懷疑任何差異都可以忽略不計。和以往一樣,你應該測量它是否值得關注,但我懷疑你有兩個線程意味着你在其他地方有延遲,並且隊列的存在不會影響到這一點。