关于后端:并发集合

29次阅读

共计 347 个字符,预计需要花费 1 分钟才能阅读完成。

ConcurrentHashMap

存储构造

存储构造同 HashMap。

如何保障线程平安

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

正文完
 0