关注
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 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 我的求职进度条 #
1240183次浏览 9187人参与
# 第一份工作应该选择高薪还是大平台 #
220923次浏览 1045人参与
# 华泰星战营,提前锁定校招offer #
5087次浏览 284人参与
# 你简历上最心虚的一句话 #
2616次浏览 24人参与
# 考公VS就业,你怎么选? #
100103次浏览 524人参与
# 哪些公司对双非友好 #
230218次浏览 1237人参与
# 卷__卷不过你们,只能卷__了 #
60116次浏览 757人参与
# 校招第一份工作你干了多久? #
150254次浏览 631人参与
# 商战,最累的是我们 #
31700次浏览 99人参与
# 国企/银行/研究所公司爆料 #
209363次浏览 920人参与
# 荣耀求职进展汇总 #
1176355次浏览 5674人参与
# 比特大陆工作体验 #
18713次浏览 89人参与
# 找工作的破防时刻 #
289667次浏览 2065人参与
# 小红书求职进展汇总 #
238549次浏览 1397人参与
# 面试等了一周没回复,还有戏吗 #
239795次浏览 1841人参与
# 哪些公司在招寒假实习? #
93684次浏览 765人参与
# 面试线索爆料 #
127313次浏览 699人参与
# 春节前,你还在投简历吗? #
43097次浏览 351人参与
# 字节7000实习来了,你投了吗? #
44517次浏览 351人参与
# 大疆求职进展汇总 #
699918次浏览 4351人参与
# 总结:offer选择,我是怎么选的 #
287512次浏览 1566人参与
查看14道真题和解析