学习总结录 学习总结录
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
首页
归档
分类
标签
  • Java基础
  • Java集合
  • MySQL
  • Redis
  • JVM
  • 多线程
  • 计算机网络
  • 操作系统
  • Spring
  • Kafka
  • Elasticsearch
  • Python
  • 面试专题
  • 案例实践
  • 工具使用
  • 项目搭建
  • 服务治理
  • ORM框架
  • 分布式组件
  • MiniSpring
  • 设计模式
  • 算法思想
  • 编码规范
友链
关于
GitHub (opens new window)
  • Java基础

  • Java集合

    • Java集合-ArrayList
    • Java集合-LinkedList
    • Java集合-Set
    • Java集合-Queue
    • Java集合-HashMap
    • Java集合-LinkedHashMap
    • Java集合-ConcurrentHashMap
      • ConcurrentHashMap 1.7
        • 存储结构
        • 分段锁机制
      • ConcurrentHashMap 1.8
        • 存储结构
        • 加锁原理
  • MySQL

  • Redis

  • JVM

  • 多线程

  • 计算机网络

  • Spring

  • Kafka

  • Elasticsearch

  • Python

  • 面试专题

  • 知识库
  • Java集合
旭日
2023-04-04
目录

Java集合-ConcurrentHashMap

# ConcurrentHashMap 1.7

# 存储结构

哈希冲突通过采用数组+链表的方式来解决。

image-20230404134354253

# 分段锁机制

1.7的版本,相当于一个Hash表由多个segment组成,而每一个 Segment 是一个类似于 HashMap 的结构,所以每一个 HashMap 的内部可以进行扩容。但是 Segment 的个数一旦初始化就不能改变。

在执行操作的过程中,首先定位到分段,然后对分段加锁,以进行安全的操作,这样避免了对整个Hash表进行加锁。

# ConcurrentHashMap 1.8

# 存储结构

哈希冲突通过数组 + 链表 / 红黑树的方式来解决。

image-20230404141255594

# 加锁原理

Java8 中的 ConcurrentHashMap 使用的 Synchronized 锁加 CAS 的机制。结构也由 Java7 中的 Segment 数组 + HashEntry 数组 + 链表 进化成了 Node 数组 + 链表 / 红黑树,Node 是类似于一个 HashEntry 的结构。它的冲突再达到一定大小时会转化成红黑树,在冲突小于一定数量时又退回链表。

上次更新: 2024/06/29, 15:13:44
Java集合-LinkedHashMap
MySQL深入01-查询语句

← Java集合-LinkedHashMap MySQL深入01-查询语句→

最近更新
01
基础概念
10-31
02
Pytorch
10-30
03
Numpy
10-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 旭日 | 蜀ICP备2021000788号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式