在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
的想法。现在,由于wrapper方法是获取SynchronizedMap
实例(仅包含一个地图对象)的唯一方法,所以第二个重载构造函数的用途是什么? 最佳答案
它用于例如在创建子图视图时扩展SynchronizedSortedMap
的SynchronizedMap
中。
public SortedMap<K,V> subMap(K fromKey, K toKey) {
synchronized (mutex) {
return new SynchronizedSortedMap<>(
sm.subMap(fromKey, toKey), mutex);
}
}
共享相同的互斥锁。