关注
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 的读写并发安全性。
查看原帖
2 评论
相关推荐
点赞 评论 收藏
分享
查看6道真题和解析
点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
327679次浏览 3077人参与
# 上班苦还是上学苦呢? #
72338次浏览 644人参与
# 百度开奖 #
183196次浏览 1143人参与
# 地方国企笔面经互助 #
4495次浏览 12人参与
# 如果有时光机,你最想去到哪个年纪? #
21634次浏览 399人参与
# 选完offer后,你后悔学本专业吗 #
21847次浏览 159人参与
# 阿里云管培生offer #
36934次浏览 422人参与
# 我的实习求职记录 #
6070077次浏览 83541人参与
# 如何一边实习一边秋招 #
996592次浏览 12662人参与
# 找工作时遇到的神仙HR #
553303次浏览 3801人参与
# 入职第一天,你准备什么时候下班 #
21608次浏览 144人参与
# 招聘要求与实际实习内容不符怎么办 #
10761次浏览 277人参与
# bilibili求职进展汇总 #
33185次浏览 356人参与
# 许愿池 #
214758次浏览 2534人参与
# 学历or实习经历,哪个更重要 #
53855次浏览 422人参与
# 你今年的平均薪资是多少? #
70728次浏览 345人参与
# 实习工作,你找得还顺利吗? #
247722次浏览 2906人参与
# 通信硬件薪资爆料 #
608766次浏览 5169人参与
# 海康威视求职进展汇总 #
400714次浏览 3408人参与
# 携程求职进展汇总 #
135709次浏览 930人参与
# 正在实习的你,几点下班 #
53322次浏览 396人参与
# 工作两年想退休了 #
53090次浏览 672人参与