0

私のプログラムには、「送信者」スレッドと「受信者」スレッドがあり、どちらも 1 つのキューで動作します。

クラスでキューを次のように定義しました。

static Queue<my_class> queue = new LinkedList<my_class>();

Queuesただし、同期されていないため、問題が発生していると思います。私の「受信者」スレッドでは、「送信者」スレッドの動作に影響を与えるアイテムをキューから削除する必要がある場合があります。

私は読んでいてBlockingQueues、それが私の状況で使用する必要があるかどうか疑問に思っていましたか? その場合、申告を変更するにはどうすればよいですか? BlockingQueue「送信者」スレッドと「受信者」スレッドの両方で宣言する必要がありますか?

常にBlockingQueue1 つのスレッドだけがキューにアクセスするようにしますか?

申し訳ありませんが、私は同期の概念にまったく慣れていないため、かなり混乱しています..

ご協力ありがとうございました。

4

2 に答える 2

0

主な利点は、BlockingQueue が正しくスレッドセーフな実装を提供することです。このランタイム実装は、同時実行の専門家によって開発、レビュー、保守されています。

ブロッキング キューは、キューからデキューしようとしてキューが空である場合、またはアイテムをエンキューしようとしてキューがすでにいっぱいである場合にブロックするキューです。空のキューからデキューしようとするスレッドは、他のスレッドがアイテムをキューに挿入するまでブロックされます。満杯のキューに項目をエンキューしようとするスレッドは、1 つ以上の項目をデキューするか、キューを完全にクリアすることによって、他のスレッドがキューにスペースを作るまでブロックされます。

于 2013-06-04T01:24:26.620 に答える