ConcurrentHashMap 相关

为什么ConcurrentHashMap要放弃分段锁?

答:1、因为在 JDK7 中 Segment 继承了重入锁 ReentrantLock。在每个 Segment 在增长的时候,这时候锁的粒度也会在不断的增长。每个锁控制的是一段,当分段很多,并且加锁的分段不连续的时候,内存空间的浪费比较严重。

在并发操作中,因为分段锁的存在,线程操作的时候,争抢同一个分段锁的几率会小很多

2、既然小了,那么应该是优点了,但是大家有没有想过如果这一分块的分段很大的时候,那么操作的时间是不是就会变的更长了。

所以第二个问题出现了:如果某个分段特别的大,那么就会影响效率,耽误时间。当需要扩容时,需要重新分配段数组,并将原有数据复制到新数组中。这个过程需要停止所有的读写操作,并持有整个ConcurrentHashMap的全局锁,会导致所有的线程都被阻塞,对性能有很大的影响。

3、为了提高 GC 的效率

4、新的同步方案

所以,这也是为什么在 JDK8 不在继续使用分段锁的原因。

 

ConcurrentHashMap底层详解(图解扩容)(JDK1.8)

JDK1.8的ConcurrentHashMap底层实现解析

 

posted @   r1-12king  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 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各版本下载汇总
点击右上角即可分享
微信分享提示