创建了一个synchronizedMap
static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());
底层其实是通过synchronized锁机制实现的
按住ctrl点击进去发现创建了一个synchronizedMap 的实例:
实际上是在Collections类中维护了一个静态内部类SynchronizedMap,该内部类中维护了一个普通的map和一个对象排斥锁mutex,如下图:
在new synchronizedMap()的时候,如果传入了mutex参数,则将对象排斥锁赋值为传入的对象;如果没有,则将对象排斥锁赋值为this,即调用synchronizedMap的对象,也就是该例中的users。
创建出synchronizedMap之后,再操作该map时,就会将方法上锁,实现线程安全,如下图: