ConcurrentHashMap 数据存储过程
2021-07-26 14:45:54 5 举报
流程图
作者其他创作
大纲/内容
check>=0
yes
no
是
当前容器的节点数量是否达到扩容的阈值
transferIndex
put操作过程说明:1.整个Nodes数组使用volatilefont color=\"#f44336\" style=\"font-size: inherit;\
数组的下标i位置是否已有元素
线程t2
从右往左开始迁移
fwd
通过计算出来的hash值与(n-1)进行按位与运算得出桶的下标i
结束
通过对key的hashcode的高十六位与低十六位进行位运算计算key的hash值
线程t3
扩容未结束
yes 初始化
put 操作过程
线程t1
bound2
cas操作成功
i2
开始
bound3
i3
bound1
no 自旋
CountCell[]为空或者CAS操作BaseCount累加1失败
统计容器中节点的数量判断是否达到了font color=\"#ff0000\
font color=\"#f44336\
扩容的过程
拿到CountCell[]
扩容说明:1.采用全局的font color=\"#2196f3\
CAS操作将sc参加扩容的线程数量设置为扩容的线程标识加2
数组是否为空
初始化数组
构造一个新的font color=\"#f44336\
i1
CAS累加某个CountCell[]数组下标的值失败
i位置是否为FWD节点
sc<0 即当前是否正在扩容
0 条评论
下一页