web-dev-qa-db-ja.com

Java)のスレッドセーフキュー

複数のスレッドがヒットするキューを実装したいと思います。

これは、スタックがシングルトンクラスにあることです。

さて、簡単な解決策はこれを同期することですか?これが標準で必要になると思いますか?ただし、書き込みを優先したい。

したがって、書き込みは優先度が高く、読み取りは優先度が低くなります。

これは可能ですか?
可能であれば、同期せずに複数のスレッドで書き込むのが理想的です。

13
Matthew Smith

なぜ同期を避けたいのですか? 「ロックフリー」構造を作成することは可能ですが、それは非常にトリッキーで、間違えやすいです。

もし私があなたなら、ArrayBlockingQueueまたはConcurrentLinkedQueue(またはJava.util.concurrentの他の構造の1つ)を使用して、あなたの生活を楽にします!

ああ、そして私は書き込みよりも読み取りを優先することについて少し逃しました。 ReentrantReadWriteLockクラスでそれを行うことができます。その場合、スレッドセーフキューは必要ありません。読み取りか書き込みかに応じて、読み取り/書き込みロックを使用して外部でロックするだけです。

22
dty