并发集合

发布于:2023-05-24 ⋅ 阅读:(209) ⋅ 点赞:(0)

ConcurrentHashMap

存储结构

存储结构同HashMap。

如何保证线程安全

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


网站公告

今日签到

点亮在社区的每一天
去签到