1

「キー」が重複することはなく、アプリケーションにとって一意であるというシナリオを想定してみましょう。つまり、各プットはnever同じキーに対して呼び出されます。このような場合には :

  1. map.put には同期が必要ですか?

  2. はいの場合、どのように?

たとえば<Name, Id>、架空の世界で全員の名前が一意である場合を考えてみましょう。このようなアプリケーションでは、map put を同期する必要がありますか?

4

4 に答える 4

3

はい。例:put()新しいキー上の aresize()がマップ上の a を引き起こす可能性があります。2 つの同時resize()呼び出しにより、データ構造の内部が不整合になる可能性があります。一貫性がないということは、(実際に目撃された) 後続の への呼び出しがput()無限にループするようなことを意味する可能性があります。これは、内部参照が一貫性のないままになり、ループが作成されるためです。

于 2013-10-12T02:13:29.673 に答える
1

基礎となる Map 実装が並行であることが 100% 保証されていない限り、一意のキーを使用する場合でも、同期を使用する必要は絶対にあります。

たとえば、同期を使用して標準の HashMap を誤用しようとすると、発生する可能性があり、発生する可能性が高いいくつかの主要なエラーがあります。

  1. 異なるキーが同じバケットにハッシュされる可能性があります。これにより、チェーンが破損し、通常はエントリが失われます。
  2. 増分/減分が上書きされると、コレクションのサイズが不正確になる可能性があります。
  3. サイズを変更すると、破損が発生します。

ここに近道はありません.. 適切に実行しようとスキップしようとしても、長期的には多くの時間を浪費するだけです.

これがあなたの理解に役立つことを願っています!

于 2013-10-12T04:34:22.590 に答える