「キー」が重複することはなく、アプリケーションにとって一意であるというシナリオを想定してみましょう。つまり、各プットはnever
同じキーに対して呼び出されます。このような場合には :
map.put には同期が必要ですか?
はいの場合、どのように?
たとえば<Name, Id>
、架空の世界で全員の名前が一意である場合を考えてみましょう。このようなアプリケーションでは、map put を同期する必要がありますか?
「キー」が重複することはなく、アプリケーションにとって一意であるというシナリオを想定してみましょう。つまり、各プットはnever
同じキーに対して呼び出されます。このような場合には :
map.put には同期が必要ですか?
はいの場合、どのように?
たとえば<Name, Id>
、架空の世界で全員の名前が一意である場合を考えてみましょう。このようなアプリケーションでは、map put を同期する必要がありますか?
はい。例:put()
新しいキー上の aresize()
がマップ上の a を引き起こす可能性があります。2 つの同時resize()
呼び出しにより、データ構造の内部が不整合になる可能性があります。一貫性がないということは、(実際に目撃された) 後続の への呼び出しがput()
無限にループするようなことを意味する可能性があります。これは、内部参照が一貫性のないままになり、ループが作成されるためです。
基礎となる Map 実装が並行であることが 100% 保証されていない限り、一意のキーを使用する場合でも、同期を使用する必要は絶対にあります。
たとえば、同期を使用して標準の HashMap を誤用しようとすると、発生する可能性があり、発生する可能性が高いいくつかの主要なエラーがあります。
ここに近道はありません.. 適切に実行しようとスキップしようとしても、長期的には多くの時間を浪費するだけです.
これがあなたの理解に役立つことを願っています!