44

JDKにはとのCopyOnWrite*実装が付属していますが、の実装はなく、私はこの事実をしばしば嘆きました。他にもコレクションの実装がありますが、標準で出荷された方がいいでしょう。それは明らかな省略のようであり、それには正当な理由があったのだろうかと思います。なぜこれが省略されたのか誰かが考えていますか?SetListMap

4

2 に答える 2

33

これはユースケースによって異なると思いますが、ConcurrentHashMapがすでにあるのに、なぜCopyOnWriteMapが必要になるのでしょうか。

多くのリーダーがあり、更新が1つまたは少数しかないプレーンなルックアップテーブルの場合は、これが適しています。

コピーオンライトコレクションとの比較:

並行性を読み取る:

コピーオンライトコレクションに相当します。複数のリーダーが、ロックなしの方法でマップから要素を同時に取得できます。

並行性を書く:

基本的に更新をシリアル化する(一度に1つの更新)書き込みコレクションのコピーよりも優れた同時実行性。同時ハッシュマップを使用すると、複数の更新を同時に実行できる可能性が高くなります。ハッシュキーが均等に分散されている場合。

書き込みマップにコピーの効果を持たせたい場合は、いつでも同時実行レベル1でConcurrentHashMapを初期化できます。

于 2010-11-28T20:19:36.163 に答える
-3

セットの最も簡単な実装は、通常、基になるマップを使用することです。彼らにはCollections.newSetFromMap()メソッドさえあります[たぶん1.6からのみ]。

彼らがすべきことは、CopyOnWriteMapとCopyOnWriteSetがCollections.newSetFromMap(new CopyOnWriteMap())と同等であることでした。

しかし、ご覧のとおり、 CopyOnWriteArraySetは、実際にはマップではなく配列によって支えられています。そして、Collections.newSetFromMap(ConcurrentHashMap())はあなたのユースケースに受け入れられませんか?

于 2012-02-07T21:19:32.050 に答える