2016-10-20 7 views
0

固定サイズのキューをJavaで作成しようとしていますが、キューに最大10個のオブジェクトしか格納しません。ただし、キューはオブジェクトの格納/追加を継続し、条件を無視します。固定サイズのキューを取得する方法

私のコード:

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.."); 
} 

私は別のRunnableクラスを持っている、と私は22個のスレッドを実行しています。この条件は、顧客クラスのオブジェクトを0-9だけ追加する必要があります。ただし、sitt.size()は20を超えることもあります。 ifの状態さえも無視されています。

P.S:ここではキューを使用している理由は、FIFOが必要なためです。

+0

なぜLinkedListを使用しますか?単純な円形バッファも機能します – Domso

+0

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

+1

マルチスレッドのシナリオであるため、if条件を入れて同期ブロックに追加する必要があります。他のスレッドが要素を追加する前に、他のスレッドがキューのサイズをチェックしている可能性があります。 – Karura91

答えて

3

LinkedBlockingQueuejava.util.concurrentからのみ使用できます。キューの固定サイズを指定できます。

new LinkedBlockingQueue<>(10); 

その後、あなたは何もしないと、キューが既にいっぱいである場合falseを返しますoffer()メソッドを使用してそれに値を挿入することができます。

+1

またはArrayBlockingQueueまたはConcurrentLinkedDequeまたはConcurrentArrayQueueまたはArrayDequeまたはLinkedBlockingDeque +1 –

+0

これらの提案をお寄せいただき、ありがとうございます。ただし、LinkedBlockingQueue <>(10);問題を解決しませんでした。質問を完全なコードで更新します。 – Nix

+0

コードを見ずに@Nix私はあなたがキューの異なるインスタンスを扱っていると仮定します。つまり、アイテムを1つのキューに追加することができますが、誤って別のキューのサイズを確認することができます。 –

関連する問題