学习ConcurrentHashMap1.7分段锁原理
当我遇上你csy 人气:4
# 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
加载全部内容