1

ConcurrentHashMap.SegmentJava 1.6コレクションライブラリの設計について:

  static final class Segment<K,V> extends ReentrantLock implements Serializable

私見、与えられたSegmentものはそうではありませんReentrantLock、それではなぜこれextendsですか?それは構成でなければなりませんでした:

static final class Segment<K,V> implements Serializable { ReentrantLock lock = ... }

4

2 に答える 2

4

javadocによると:

セグメントは、ハッシュテーブルの特殊なバージョンです。これは、一部のロックを簡素化し、個別の構築を回避するために、ReentrantLockから日和見的にサブクラス化します。

非公開の内部クラスであることを考えると、パフォーマンス、使いやすさ、優れたデザインの間でトレードオフが発生したと思います。

于 2012-01-21T15:33:54.537 に答える
2

その前のコメントはあなたの最良の説明です。

/**
 * Segments are specialized versions of hash tables.  This
 * subclasses from ReentrantLock opportunistically, just to
 * simplify some locking and avoid separate construction.
 */
于 2012-01-21T15:32:56.660 に答える