1. ホーム
  2. java

[解決済み] ConcurrentHashMapとSynchronized HashMapの比較

2022-04-22 09:34:34

質問

ラッパークラスを使用する場合と何が違うのですか。 SynchronizedMap を使用し、その上で HashMapConcurrentHashMap ?

を変更できるようになっただけなのでしょうか? HashMap を繰り返しながら( ConcurrentHashMap )?

解決方法は?

同期 HashMap

  1. 各メソッドの同期には object level lock . そのため、synchMap の get と put メソッドはロックを取得します。

  2. コレクション全体をロックすることは、パフォーマンスのオーバーヘッドになります。あるスレッドがロックを保持している間、他のスレッドはコレクションを使用することができません。

ConcurrentHashMap は、JDK 5 で導入されました。

  1. オブジェクトレベルでのロックはなく、もっと細かい粒度でのロックとなります。例えば ConcurrentHashMap であり、ロックは hashmap bucket level .

  2. 低レベルロックの効果は、同期化されたコレクションでは不可能な、読者と書込み者の同時進行が可能なことです。これにより、スケーラビリティが大幅に向上します。

  3. ConcurrentHashMap を投げない。 ConcurrentModificationException もし、あるスレッドが反復処理中にそれを変更しようとしたら。

この記事 Java 7: HashMapとConcurrentHashMapの比較 はとても良い読み物です。ぜひ読んでみてください。