2016-04-29 16 views
-1

複数のスレッドが並行して実行されており、各スレッドが同じHashMapインスタンスを使用している場合は、問題なく安全ですか? HashMapオブジェクトは、データの読み取りにのみ使用されます。いずれのスレッドにもHashMapへの書き込みデータはありません。並列で実行されている複数のスレッドで同じインスタンスを使用できますか?

明らかに、HashMapインスタンスは基本クラスのメンバーであり、そのサブクラスでバックグラウンドスレッドを呼び出すことになります。それらのスレッドはHashMapオブジェクトを参照します。

+3

http://stackoverflow.com/questions/104184/is-it-safe-to-get-values-from-a-java-util-hashmap-from-multiple-threads-no-modi – mastov

+0

あなたは、 **同じフィールドから**読んで**安全に使うことができますが、同時に複数のスレッドが同じ値を読み取る可能性があることに注意してください。 – specializt

+0

@mastovありがとう!この答えは見つかりませんでした。 –

答えて

1

スレッドがHashMapからのみ読み取っている場合は問題ありません。少なくとも1つのスレッドがそれを同時に読み取っている間に、HashMapを変更しているときに問題になるでしょう。

Javaには、java.util.concurrent.ConcurrentHashMapのように、同時使用で安全な他のMap実装があります。

+0

https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.htmlから「この実装は同期されていません」という見積もりを追加しますか? –

+0

@AndyTurnerこれは、スレッドが読み込みのみで、 'HashMap'に書き込んでいないときにはあまり関係ありません。 – Jesper

+0

まあ、それは一種です。構造的にマップを修正し、複数のスレッドから読み込むときには、同期する必要があると言われています。これは、読んだだけでは同期が必要ではないことを明示的に述べていませんが、これは不在によって示唆されていると思います。 –

関連する問題