ConcurrentHashMap线程安全的具体实现方式/底层具体实现
2024-08-28 18:14:58
1. jdk1.7以及之前
ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成。
通俗的话讲:就是首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问。
示意图:
2. JDK1.8
ConcurrentHashMap取消了Segment分段锁,采用CAS和synchronized来保证并发安全。
数据结构跟HashMap1.8的结构类似,数组+链表/红黑二叉树。
synchronized只锁定当前链表或红黑二叉树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。
示意图:
最新文章
- [转]as3 算法实例【输出1 到最大的N 位数 题目:输入数字n,按顺序输出从1 最大的n 位10 进制数。比如输入3,则输出1、2、3 一直到最大的3 位数即999。】
- spring hibernate摘记
- [自制简单操作系统] 2、鼠标及键盘中断处理事件[PIC\GDT\IDT\FIFO]
- YTU 2607: A代码填空题--更换火车头
- Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)
- jersey REST的接口简述
- HDU 4283	You Are the One
- Ubuntu下使用虚拟机安装Windows XP(sunvirtualbox)
- Tenured 区并发垃圾回收器CMS介绍
- Vue列表过渡
- python使用上下文管理器实现sqlite3事务机制
- Android开发PreferenceActivity 用法的代码
- nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)
- poj1456
- phpcms公共函数库 总结
- 【oracle入门】数据库系统范式
- python 操作记事本
- [UE4]枚举Enum和Switch Enum
- 项目抛弃Tomcat容器,用代码启动Tomcat插件
- 杭电OJ1789、南阳OJ236(贪心法)解题报告