1. ホーム
  2. java

[解決済み] ConcurrentHashMapとCollections.synchronizedMap(Map)の違いは何ですか?

2022-03-16 13:53:31

質問

私は、複数のスレッドによって同時に変更されるマップを持っています。

Java APIには3種類のsynchronized Mapの実装があるようです。

  • Hashtable
  • Collections.synchronizedMap(Map)
  • ConcurrentHashMap

私が理解したところでは Hashtable は古い実装(時代遅れの Dictionary クラス) に適合するように後で修正されました。 Map インターフェイスになります。一方 同期しているのですが、どうやら深刻な スケーラビリティの問題 新しいプロジェクトにはお勧めできません。

しかし、他の2つはどうでしょうか?が返すMapにはどのような違いがあるのでしょうか? Collections.synchronizedMap(Map)ConcurrentHashMap s? どちらがどのような状況に適しているのでしょうか?

解決方法は?

あなたのニーズに合わせて ConcurrentHashMap . これは、複数のスレッドからブロックする必要なく、同時に Map を変更することができます。 Collections.synchronizedMap(map) はブロッキングするMapを作成し、パフォーマンスを低下させますが、(適切に使用すれば)一貫性は確保されます。

データの一貫性を確保する必要があり、各スレッドがマップの最新のビューを持つ必要がある場合は、2番目のオプションを使用します。パフォーマンスが重要で、各スレッドがマップへのデータ挿入のみを行い、読み込みはあまり頻繁に行われない場合は、最初のオプションを使用します。