ConcurrentHashMap
存储构造
存储构造同HashMap。
如何保障线程平安
1.put流程
a.ConcurrentHashMap中存储Node节点的数组是volital类型的,保障了多线程下这个数组的可见性,也就是说保障了多个线程拜访不会读到脏数据。
b.插入第一个元素时候,会先初始化数组,初始化的时候用到了DCL和CAS的形式保障了只会有一个线程去执行初始化操作,失败的线程会yield,执行后续插入操作。
c.查看以后槽位是否曾经有元素,如果没有,用CAS的形式插入,插入胜利返回。
d.插入失败,判断以后地位数据是否正在扩容,如果是则执行扩容办法,帮忙扩容。
e.如果以上条件都不满足,则应用synchronized锁住以后桶地位,执行插入,保障以后只会有一个线程增加到链表或者红黑树。