SynchronizedMap类中重载构造函数的用途
在Collections
类中, SynchronizedMap
类有两个构造函数。 一个只使用一个map
实例,另一个只使用map
和mutex
。
SynchronizedMap(Map m) { this.m = Objects.requireNonNull(m); mutex = this; } SynchronizedMap(Map m, Object mutex) { this.m = m; this.mutex = mutex; }
但是,SynchronizedMap类是一个私有静态类,只能使用提供的包装器方法来访问它:
public static Map synchronizedMap(Map m) { return new SynchronizedMap(m); }
从这个链接可以理解,第二个构造函数的想法是使用mutex
用户提供的mutex
。 现在,由于包装器方法是获取SynchronizedMap
实例(只接受一个map对象)的唯一方法,因此第二个重载构造函数的目的是什么?
它用于例如SynchronizedSortedMap
,它在创建子图视图时扩展SynchronizedMap
。
public SortedMap subMap(K fromKey, K toKey) { synchronized (mutex) { return new SynchronizedSortedMap<>( sm.subMap(fromKey, toKey), mutex); } }
共享相同的互斥锁。