关注
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 评论
相关推荐
牛客热帖
更多
正在热议
更多
# 在大厂上班是一种什么样的体验 #
10537次浏览 132人参与
# 你认为工作的意义是什么 #
249165次浏览 1498人参与
# 程序员找工作至少要刷多少题? #
18260次浏览 246人参与
# 为了减少AI幻觉,你注入过哪些设定? #
4482次浏览 147人参与
# 我现在比当时_,你想录用我吗 #
8615次浏览 111人参与
# 机械人避雷的岗位/公司 #
43343次浏览 298人参与
# 一张图晒一下你的AI员工 #
4974次浏览 114人参与
# 论秋招对个人心气的改变 #
10716次浏览 154人参与
# 关于春招/暑期实习,你想知道哪些信息? #
7374次浏览 119人参与
# 刚入职的你踩过哪些坑 #
6731次浏览 127人参与
# AI Coding的使用心得 #
4572次浏览 101人参与
# 晒晒你司的新年福利 #
8394次浏览 105人参与
# 牛客AI体验站 #
6670次浏览 185人参与
# 12306一秒售罄,你抢到回家的票了吗? #
1912次浏览 47人参与
# 柠檬微趣工作体验 #
14763次浏览 83人参与
# 总结:哪家公司面试体验感最差 #
92973次浏览 430人参与
# 程序员能干到多少岁? #
8520次浏览 115人参与
# 你认为小厂实习有用吗? #
118006次浏览 679人参与
# 互联网公司评价 #
485544次浏览 4109人参与
# 应届生进小公司有什么影响吗 #
118253次浏览 1159人参与
查看10道真题和解析