关注
concurrentHashMap 跟 hashmap 也是一个套路,1.7 以前版本是什么样,1.8 版本是什么样。为什么能做到线程安全的?插入、读取元素时的过程(1.7、1.8 的优化)。
在 1.7 之前,ConcurrentHashMap 使用的是 segment数组+分段锁的方法,在插入元素时首先会计算这个 key 的 hashcode,然后找到 指定位置的segment数组,如果指定的数组为空,则进行初始化并插入元素,如果不为空,则先获取锁,然后计算 key 值存放的位置,再进行插入元素,获取不到锁的会进行自旋等待获取锁。
1.7 之后,concurrentHashMap 取消了 segment 数组,使用跟 hashMap 一致的结构,在插入元素时会采用 CAS尝试写入数据,失败之后再用synchronized 锁的方式来保证一定能写入,来实现线程安全。
那么如何做到其他线程可以知道当前线程的数据修改呢?通过利用 volatile 关键字修饰,保证修改可见性,并且写操作时会进行 cas+重试以及 synchronized写入数据,就能保证写操作的并发安全。这两个 点解决了 ConcurrentHashmap 的读写并发安全性。
查看原帖
3 评论
相关推荐
2025-12-01 15:33
门头沟学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26年哪些行业会变好/更差 #
6479次浏览 113人参与
# 实习,不懂就问 #
146935次浏览 1311人参与
# 去年的flag与今年的小目标 #
3483次浏览 106人参与
# 卷__卷不过你们,只能卷__了 #
2327次浏览 56人参与
# 有深度的简历长什么样? #
8244次浏览 170人参与
# 哪些公司在招寒假实习? #
3173次浏览 36人参与
# 你都用AI做什么 #
3143次浏览 84人参与
# 入职第一天 #
5207次浏览 87人参与
# 写论文的崩溃时刻 #
1790次浏览 49人参与
# 你不能接受的企业文化有哪些 #
3990次浏览 73人参与
# 实习学到最有价值的工作习惯 #
54218次浏览 433人参与
# 一人分享一道面试手撕题 #
10859次浏览 545人参与
# 你最满意的offer薪资是哪家公司? #
64167次浏览 319人参与
# 外包能不能当跳板? #
55935次浏览 260人参与
# 滴滴求职进展汇总 #
292657次浏览 2411人参与
# 应届生应该先就业还是先择业 #
161605次浏览 815人参与
# uu们,春招你还来吗? #
39511次浏览 232人参与
# AI了,我在打一种很新的工 #
125770次浏览 1304人参与
# 秋招你被哪家公司挂了? #
1002328次浏览 7704人参与
# 计算机有哪些岗位值得去? #
259395次浏览 1962人参与
SHEIN希音公司福利 292人发布