6

重複の可能性:
ConcurrentHashMap と Collections.synchronizedMap(Map) の違いは何ですか?

HashMap、Collenctions.synchonizedMap、および ConcurrentHashMap の違いを読んでいました。私の理解では、 Collections.synchronizedMap がコレクション全体にロックを適用したため、パフォーマンスのオーバーヘッドが発生しました。ただし、ConcurrentHashMap は同期を使用しません。セグメントを使用して結果を達成するため、HashMap と同様のパフォーマンスを提供します。

私の理解が正しいかどうか提案してください。また、この場合、複数のスレッドがアクセスしていなくても、どこでも ConcurrentHashMap を使用できますか?

4

1 に答える 1

9

ConcurrentHashMap は同期を使用しません。セグメントを使用して結果を達成します

ConcurrentHashMap はセグメント レベルで同期し、putIfAbsent のようなアトミック操作を許可したり、古い値を新しい値に置き換えたりします。この利点は、ロックストライピングと呼ばれる手法によって得られます。

複数のスレッドがアクセスしていなくても、どこでも ConcurrentHashMap を使用できますか?

いいえ、そうする理由が思い浮かびません。パフォーマンスは別として、データ構造の選択は、コードがどのように使用されると予想されるか (HashMap --> シングル スレッド) に関するドキュメントとしても機能します。ConcurrentHashMap は、それが使用されているクラスがスレッド セーフである場合にのみ使用してください。そうしないと、非スレッド セーフ クラスでスレッド セーフ データ構造を使用すると、次にコードを見る人が混乱することになります。

于 2013-01-09T05:52:54.920 に答える