今天学习的时候看到一行代码:

static Map<Long, User> users = Collections.synchronizedMap(new HashMap<Long, User>());

    创建了一个synchronizedMap,于是就翻了一下源码,看了一下具体的实现,发现底层其实是通过synchronized锁机制实现的,在此记录一下,当作学习心得。

    

    按住ctrl点击进去发现创建了一个synchronizedMap 的实例:


    再点进去可以看到实际上是在Collections类中维护了一个静态内部类SynchronizedMap,该内部类中维护了一个普通的map和一个对象排斥锁mutex,如下图:

 

    在new synchronizedMap()的时候,如果传入了mutex参数,则将对象排斥锁赋值为传入的对象;如果没有,则将对象排斥锁赋值为this,即调用synchronizedMap的对象,也就是该例中的users。

    创建出synchronizedMap之后,再操作该map时,就会将方法上锁,实现线程安全,如下图:



    PS:这只是实现map线程安全的方法之一,以后会将其他方法研究一下,并做一个对比。

相关文章:

  • 2021-05-03
  • 2021-11-23
  • 2021-08-03
  • 2021-08-03
  • 2021-08-08
  • 2022-01-01
  • 2021-11-30
  • 2021-11-30
猜你喜欢
  • 2021-10-05
  • 2021-10-20
  • 2021-08-03
  • 2022-01-01
  • 2021-08-03
  • 2022-02-09
  • 2021-04-05
相关资源
相似解决方案