SynchronizedMap类中重载构造函数的用途

时间:2018-06-13 05:13:53

标签: java collections

Collections类中,类SynchronizedMap有两个构造函数。一个只有map个实例,另一个只有mapmutex

    SynchronizedMap(Map<K,V> m) {
        this.m = Objects.requireNonNull(m);
        mutex = this;
    }

    SynchronizedMap(Map<K,V> m, Object mutex) {
        this.m = m;
        this.mutex = mutex;
    }

但是,SynchronizedMap类是一个私有静态类,只能使用提供的包装器方法访问它:

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
    return new SynchronizedMap<>(m);
}

this link可以理解,第二个构造函数使用除mutex之外的用户提供的this的想法。现在,因为包装器方法是获取SynchronizedMap实例的唯一方法(它只接受一个map对象),所以第二个重载构造函数的目的是什么?

1 个答案:

答案 0 :(得分:1)

用于例如在SynchronizedSortedMap中,在创建子地图视图时扩展SynchronizedMap

 public SortedMap<K,V> subMap(K fromKey, K toKey) {
            synchronized (mutex) {
                return new SynchronizedSortedMap<>(
                    sm.subMap(fromKey, toKey), mutex);
            }
        }

共享相同的互斥锁。