在Collections
类中,类SynchronizedMap
有两个构造函数。一个只有map
个实例,另一个只有map
和mutex
。
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对象),所以第二个重载构造函数的目的是什么?
答案 0 :(得分:1)
用于例如在SynchronizedSortedMap
中,在创建子地图视图时扩展SynchronizedMap
。
public SortedMap<K,V> subMap(K fromKey, K toKey) {
synchronized (mutex) {
return new SynchronizedSortedMap<>(
sm.subMap(fromKey, toKey), mutex);
}
}
共享相同的互斥锁。