ConcurrentHashMap.Segment is-a-ReentrantLock? - PullRequest
1 голос
/ 21 января 2012

О дизайне ConcurrentHashMap.Segment в библиотеке коллекций Java 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 = ... }

Ответы [ 2 ]

4 голосов
/ 21 января 2012

Джавадок говорит:

Сегменты - это специализированные версии хеш-таблиц. Это подклассы от ReentrantLock оппортунистически, просто чтобы упростить некоторые блокировки и избегайте отдельного строительства.

Учитывая, что это закрытый внутренний класс, я думаю, они нашли компромисс между производительностью, простотой использования и хорошим дизайном.

2 голосов
/ 21 января 2012

Комментарии перед вами - ваше лучшее объяснение.

/**
 * Segments are specialized versions of hash tables.  This
 * subclasses from ReentrantLock opportunistically, just to
 * simplify some locking and avoid separate construction.
 */
...