2016-10-20 112 views
0

我想在java中創建一個固定大小的隊列,我只想在隊列中存儲最多10個對象。但是,隊列不斷存儲/添加對象並忽略if條件。如何獲得固定大小的隊列

我的代碼:

Queue<Customer> sitt = new LinkedList<Customer>(); 
if(sitt.size() < 10) { 
System.out.println("Added"); 
((LinkedList<Customer>)sitt).offer(cust); 
}else { 
System.out.println("No space.."); 
} 

我還有一個運行的類,並且我運行22個線程。這種情況只應該添加Customer類的0-9對象。但是,sitt.size()甚至超過了20.有誰能告訴我這裏有什麼問題嗎?即使if條件被忽略。

P.S:我在這裏使用Queue的原因是因爲我需要FIFO。

+0

你爲什麼使用LinkedList?一個簡單的循環緩衝區也可以工作 – Domso

+0

http://stackoverflow.com/questions/9580457/fifo-class-in-java – Stefan

+1

由於你在一個多線程場景,你應該把你的條件,並添加一個同步塊。也許其他線程在其他線程添加其元素之前檢查隊列大小。 – Karura91

回答

3

您可以使用LinkedBlockingQueuejava.util.concurrent - 它允許您指定隊列的固定大小。

new LinkedBlockingQueue<>(10); 

然後你就可以使用offer()方法,它會做什麼,並返回false如果隊列已滿值插入它。

+1

或ArrayBlockingQueue或ConcurrentLinkedDeque或ConcurrentArrayQueue或ArrayDeque或LinkedBlockingDeque +1 –

+0

感謝您的建議,我將嘗試所有這些。但是,LinkedBlockingQueue <>(10);沒有解決問題。我將用完整的代碼更新我的問題。 – Nix

+0

@Nix沒有看代碼我假設你正在處理不同的隊列實例。那就是 - 您可能會將項目添加到一個隊列中,但是會錯誤地檢查另一個隊列的大小。 –