2012-01-21 3 views
1

О проектировании ConcurrentHashMap.Segment в библиотеке 1,6 коллекции Java:ConcurrentHashMap.Segment is-a-ReentrantLock?

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

ИМХО, данный Segment это-не-а ReentrantLock, то почему это extends? Она должна была композиция:

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

ответ

2

Комментарии перед ней все возможное объяснение.

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

Javadoc говорит:

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

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