1

关于ConcurrentHashMap.SegmentJava 1.6 集合库的设计:

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

恕我直言,给定Segment的 is-not-a 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 回答