关注
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 评论
相关推荐

点赞 评论 收藏
分享
点赞 评论 收藏
分享

点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26届的你们有几段实习? #
19393次浏览 270人参与
# 你小时候最想从事什么职业 #
102670次浏览 1771人参与
# 你被哪些公司秒挂过? #
18506次浏览 182人参与
# 网申一定要掌握的小技巧 #
9628次浏览 65人参与
# 如何提高实习转正率? #
7494次浏览 133人参与
# 新凯来求职进展汇总 #
41006次浏览 108人参与
# 你认为哪些项目算烂大街? #
8194次浏览 196人参与
# 机械校招之路总结 #
92392次浏览 1889人参与
# 你后悔自己读研吗? #
8859次浏览 175人参与
# 你以为的实习VS真实的实习 #
11384次浏览 131人参与
# 月薪多少能在一线城市生存 #
10607次浏览 169人参与
# 腾讯工作体验 #
479859次浏览 3498人参与
# 找工作时的取与舍 #
81302次浏览 577人参与
# 最难的技术面是哪家公司? #
5891次浏览 57人参与
# 秋招拿一个offer可以躺平吗 #
144931次浏览 928人参与
# 安利/避雷我的专业 #
77666次浏览 526人参与
# 面试等了一周没回复,还有戏吗 #
137154次浏览 1229人参与
# 你想留在一线还是回老家? #
50011次浏览 513人参与
# 选择和努力,哪个更重要? #
86039次浏览 745人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
114887次浏览 799人参与