ConcurrentHashMap 相关
为什么ConcurrentHashMap要放弃分段锁?
答:1、因为在 JDK7 中 Segment
继承了重入锁 ReentrantLock。在每个 Segment
在增长的时候,这时候锁的粒度也会在不断的增长。每个锁控制的是一段,当分段很多,并且加锁的分段不连续的时候,内存空间的浪费比较严重。
在并发操作中,因为分段锁的存在,线程操作的时候,争抢同一个分段锁的几率会小很多
2、既然小了,那么应该是优点了,但是大家有没有想过如果这一分块的分段很大的时候,那么操作的时间是不是就会变的更长了。
所以第二个问题出现了:如果某个分段特别的大,那么就会影响效率,耽误时间。当需要扩容时,需要重新分配段数组,并将原有数据复制到新数组中。这个过程需要停止所有的读写操作,并持有整个ConcurrentHashMap的全局锁,会导致所有的线程都被阻塞,对性能有很大的影响。
3、为了提高 GC 的效率
4、新的同步方案
所以,这也是为什么在 JDK8 不在继续使用分段锁的原因。
ConcurrentHashMap底层详解(图解扩容)(JDK1.8)
JDK1.8的ConcurrentHashMap底层实现解析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2022-05-22 Ubuntu安装zookeeper
2022-05-22 Linux系列之下载安装jdk-8
2022-05-22 Oracle JDK8各版本下载汇总