5

CopyOnWriteArrayListかなり多用しています。これは特に次の場合に当てはまります。

  • スレッドは多くの読み取りを実行します
  • スレッドは少し書き込みを実行します

ただし、いつ使用Collections.synchronizedList()しますか

  • スレッドは少し読み取りを実行します
  • スレッドは多くの書き込みを実行します

これは、CopyOnWriteArrayList Java Docによると

基になる配列の新しいコピーを作成することによって、すべての変更操作 (追加、設定など) が実装される ArrayList のスレッドセーフなバリアント。

これは通常、コストがかかりすぎます...

に関しては、 を選択するConcurrentHashMap際に同じロジックを適用できるかどうか疑問に思っていました。ConcurrentHashMapCollections.synchronizedMap()

ConcurrentHashMap書き込み操作を実行するたびに、基になるデータ構造の新しいコピーを作成しますか? 読み取り操作よりも書き込み操作の方が多い場合、Collections.synchronizedMap よりもパフォーマンスが低下しますか?

4

4 に答える 4

1

ConcurrentHashMapほとんどの場合、より優れたパフォーマンスとより便利な API (check-then-setスレッドの問題を回避できる)を備えているため、使用するのに適したものです。よりきめ細かいアクセスのためにロック ストリッピング
を 使用し、マップをコピーしません。を使用すべきではない唯一 のアプリケーションは、排他的アクセスのためにマップをロックする必要がある場合です。
ConcurrentHashMap

于 2013-04-11T07:55:57.847 に答える