【源码分析篇】ConcurrentHashMap之原理
Java8中的实现:
1. 先拿到根据rehash值定位,拿到table[i]的首节点first
2. 判断key和value是否存在null值,存在直接抛NPE。
· 若数组为空,初始化数组
· 若链表为空,初始化一个链表节点
· 若当前节点的hashCode=-1,表示当前正在扩容,去帮助扩容
· 否则,若没有获取锁,阻塞,获取到锁,进行后续操作
· 若为key存在,直接覆盖,否则新增
· 若为树形,则进行树形的添加操作
· 判断是否满足树化的条件