10

この質問は、ここSOでの私の前の質問の直後に続きます。私の2番目の質問に対する答えはノーだと思います。では、java.util.concurrentパッケージにConcurrentLinkedHashMapがない理由を理解したいと思いますか?つまり、ConcurrentHashMapはありますが、ConcurrentLinkedHashMapはありません。並行環境でそのようなクラスを持つことはまったく意味がありませんか?ここで利用できない主な技術的理由は何ですか?Guava / Apache Commonsに似たようなものはありますか?

4

3 に答える 3

10

jdkにConcurrentLinkedHashMapクラスがないのはなぜですか?

Oracle Javaの人たちにそれを尋ねる必要がありますが、それは次の組み合わせだと思います。

  • 多くの人がそれを必要としないだろうという認識、そして
  • 同時使用の多いユースケースで、優れたパフォーマンスプロパティを備えたデータ構造を実装する際の固有の問題。

この場合、キー/値/エントリセットの反復が同時実行のボトルネックにならないようにコレクションクラスを実装することは、...ええと...難しいと思われます。(そして、人々それを行う方法を考え出したとしても、汎用の高度に並行したデータ構造とアルゴリズムの設計、実装、および正当性の証明は難しいという事実が残っています。)

于 2012-09-06T12:42:54.857 に答える
4

Googleからのものがあるようです https://code.google.com/p/concurrentlinkedhashmap/

この投稿も確認してください: ConcurrentLinkedHashMapがGuavaに統合されたとはどういう意味ですか?

于 2013-04-17T13:58:53.887 に答える
2
#define PERSONAL_OPINION

設計の観点からは、常に使用する必要がある方が理にかなっています

Map m = Collections.synchronizedMap(new HashMap());
  ...
Set s = m.keySet();  // Needn't be in synchronized block
  ...
synchronized(m) {  // Synchronizing on m, not s!
   Iterator i = s.iterator(); // Must be in synchronized block
   while (i.hasNext())
      foo(i.next());
}

同期マップの例

なんで?同期メカニズムは高度な抽象化(Mapインターフェース)に関連付けられているためです。しかし、私が正しいと仮定すると、まだ持っている2つの理由がありますConcurrentHashMap

  • ConcurrentHashMapこの同期メカニズムの前にどちらかが存在します
  • 特定の同期メカニズムを作成すると、パフォーマンスが向上します。

私のポイントは、ConcurrentHashMap存在してはならない理想的なデザインの世界にあります。

#end //personal opinion
于 2012-09-06T12:43:54.413 に答える