学习ConcurrentHashMap1.7分段锁原理

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

学习ConcurrentHashMap1.7分段锁原理

当我遇上你csy   2020-03-17 我要评论
# 1. 概述 接上一篇 [学习 ConcurrentHashMap1.8 并发写机制](https://mp.weixin.qq.com/s/e-ZA9oxzJGRVt0mBjCIi5A), 本文主要学习 `Segment分段锁` 的实现原理。 虽然 `JDK1.7` 在生产环境已逐渐被 `JDK1.8` 替代,然而一些好的思想还是需要进行学习的。比方说位图中寻找 `bit` 位的思路是不是和 `ConcurrentHashMap1.7` 有点相似? 接下来,本文基于 `OpenJDK7` 来做源码解析。 # 2. ConcurrentHashMap1.7 初认识 ConcurrentHashMap 中 put()是线程安全的。但是很多时候, 由于业务需求, 需要先 `get()` 操作再 `put()` 操作,这 2 个操作无法保证原子性,这样就会产生**线程安全**问题了。大家在开发中一定要注意。 ConcurrentHashMap 的结构示意图如下: ![](https://gitee.com/idea360/oss/raw/master/images/concurrentHashmap7-segment.png) 在进行数据的定位时,会首先找到 `segment`, 然后在 `segment` 中定位 `bucket`。如果多线程操作同一个 `segment`, 就会触发 `segment` 的锁 `ReentrantLock`, 这就是分段锁的**基本实现原理**。 # 3. 源码分析 ## 3.1 HashEntry `HashEntry` 是 `ConcurrentHashMap` 的基础单元(节点),是实际数据的载体。 ```java static final class HashEntry

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们