转载

解读java集合框架源码-ConcurrentHashMap

解读java集合框架源码-ConcurrentHashMap 解读java集合框架源码-ConcurrentHashMap 解读java集合框架源码-ConcurrentHashMap 解读java集合框架源码-ConcurrentHashMap 解读java集合框架源码-ConcurrentHashMap 解读java集合框架源码-ConcurrentHashMap

类继承图

解读java集合框架源码-ConcurrentHashMap

成员变量

UnSafe类通过以下成员变量,直接操作内存实现了数据在多个线程间的同步。

通过CAS机制(sizeCtl)来保证只有一个线程参与hash表初始化操作、扩容操作

  • sizeCtl
    解读java集合框架源码-ConcurrentHashMap
  • transferIndex
    解读java集合框架源码-ConcurrentHashMap
  • baseCount
    解读java集合框架源码-ConcurrentHashMap
  • cellsBusy
    解读java集合框架源码-ConcurrentHashMap

添加元素

解读java集合框架源码-ConcurrentHashMap 步骤:

  1. 初始化hash表
    解读java集合框架源码-ConcurrentHashMap
  2. 获取hash值对应桶中的首节点
    解读java集合框架源码-ConcurrentHashMap
  3. hash值对应桶中的首节点为null时,直接放入桶中
    解读java集合框架源码-ConcurrentHashMap
  4. 如果当前处于扩容阶段(即首节点f.hash == MOVED),参与扩容
  5. 对桶的首节点加锁,添加节点
    解读java集合框架源码-ConcurrentHashMap

查询元素

解读java集合框架源码-ConcurrentHashMap

查询不需要加锁,大致流程跟HashMap一致。区别在于获取桶节点是通过

UnSafe类从内存直接读取

原文  https://blog.luhuancheng.com/2019/03/21/解读java集合框架源码-ConcurrentHashMap/
正文到此结束
Loading...