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

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

  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); } } 

共享相同的互斥锁。