ivaylo:
ConcurrentHashMapのは、スレッドセーフであるが、私はマップの部分だけを理解してロックされ、読み取り専用操作が同時に存在する場合、競合状態が存在することを意味書き込み操作のためにしているため、競合状態は、発生する可能性があります。
しかし、私はここのようにも読んでhttps://en.wikipedia.org/wiki/Thread_safety
Thread safe: Implementation is guaranteed to be free of race conditions when accessed by multiple threads simultaneously.
私はConcurrentHashMapのは、スレッドセーフですが、完全に同期していないと言うことはできますか?ここで右の用語は何ですか?
ソロモンスロー:
私はの正式な定義があることを知らない「スレッドセーフです。」
人々は、いくつかのことを言うとき、クラスはスレッドセーフである、彼らは通常、複数のスレッドによるクラスメソッドの同時使用は、クラスのドキュメントを読んでいる合理的なプログラマを驚かせるだろう行動の原因ではないことを意味します。
以下のために、「スレッドセーフ」Map
のようなものを意味します:
- 二つ以上のスレッドが異なる鍵を格納する場合は、店舗のすべてが発生します。
- 2つの以上のスレッドが同じキーに異なる値を格納する場合は、店舗の少なくとも一方が起こります。
- 1つのスレッドの店舗別のスレッドの試みは、そのキーの値を取得するときにキーの値があれば、読み取りスレッドが古いか、値または新しい値を取得します。
- キーKの値は、理由のアクセスおよび/または他のキーを格納する複数のスレッドで変更することはありません。
- 複数のスレッドによって、同じマップの同時使用は、JVMが投げさせることはありません
VirtualMachineError
か、それがセグメンテーションフォールトを引き起こします。 - 等
上記のいくつかは、クラス自体がないようにする無力であることを、競合状態の例であることに注意してください。「スレッド安全」ではないあなたは、スレッドセーフクラスを使用する場合は、あなたのプログラムが競合状態から自由になることを約束。それだけで、クラス自身のソースコードは、プログラム内のスレッド関連のバグの原因とならないことを約束しています。