java8 ConcurrentHashMap的put方法
2019-07-12 本文已影响85人
12345婷花
java8 ConcurrentHashMap源码分析
put方法
直接进入put方法,同其他集合类,主要内容都在putVal方法中。
putVal方法主要思路如下:
计算Hash值
判断当前的table是否为空,如果为空则进行初始化操作。
table不为空则根据Hash值找到对应下标的节点
下标节点为空则通过cas将新节点放入,失败进入循环
如果为ForwardingNode类型,则表示当前其他线程正在扩容,则进入helpTransfer()协助扩容
如果不为空且是普通节点,则对节点上锁,往链表或者红黑树添加。
cas更新baseCount,并判断是否需要扩容