ConcurrentHashMap底层结构分析
jdk1.7的ConcurrentHashMap
底层数据结构: 分段的数组+链表。ConcurrentHashMap是由Segment数据结构和HashEntry数据结构组成。Segment实现了ReentrantLock,所以Segment是一种可重入锁,扮演锁的角色。HashEntry用于存储键值对数据。一个ConcurrentHashMap包含一个Segment数组。Segment数组中的每个元素包含一个HashEntry数组,HashEntry数组中的每个元素是一个链表结构的元素。Segment数组的每个元素各守护着一个HashEntry数组中的素有元素。当对HashEntry数组的数据进行修改时,必须首先获得对应的Segment数组元素的锁。
实现线程安全的方式: 首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据时,其他段的数据也能被其他线程访问,提高并发访问率。
jdk1.8的ConcurrentHashMap
- 底层数据结构: ConcurrentHashMap取消了Segment分段锁,采用CAS(Compare-and-Swap,比较并替换)和synchronized来保证并发安全。数据结构跟HashMap1.8的结构类似, 是数组+链表/红黑树。(jdk1.6以后对synchronized锁做了很多优化,比如偏向锁、轻量级锁、自旋锁、锁消除、锁粗化等)
- 实现线程安全的方式:
①在jdk1.7的时候,ConcurrentHashMap采用分段锁,对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分,多线程访问容器里不同数据段的数据,就不会产生锁竞争,提高并发访问率。
②到了jdk1.8的时候 ,synchronized只锁定当前链表或者红黑树的首节点,这样只要hash不冲突,就不会产生并发,效率又提升N倍。
jdk1.8的ConcurrentHashMap(TreeBin:红黑树节点;Node:链表节点)
ConcurrentHashMap底层结构分析相关推荐
- ConcurrentHashMap 底层原理,你真的理解了吗?
ConcurrentHashMap 是 HashMap 的线程安全版本,与之前版本的ConcurrentHashMap实现来看,java 8中做了较大调整,本文仅分析java 8的实现,java 8 ...
- ConcurrentHashMap底层详解(图解扩容)(JDK1.8)
数据结构 使用数组+链表+红黑树来实现,利用 CAS + synchronized 来保证并发更新的安全 源码分析 put方法 public V put(K key, V value) {return ...
- 并发编程三:深入理解并发List、Set、ConcurrentHashMap底层原理
深入理解并发List.Set.ConcurrentHashMap底层原理 之前两篇分析了并发的三大特性和JMM模型,从硬件.jvm.java层面分别进行分析.JMM模型是并发当中最难理解的部分,涉及到 ...
- Java中ConcurrentHashMap底层实现原理(JDK1.8)源码分析2
https://blog.csdn.net/programmer_at/article/details/79715177 https://blog.csdn.net/qq_41737716/categ ...
- 嘿嘿,我就知道面试官接下来要问我 ConcurrentHashMap 底层原理了,看我怎么秀他...
来自:烟雨星空 前言 上篇文章介绍了 HashMap 源码后,在博客平台广受好评,让本来己经不打算更新这个系列的我,仿佛被打了一顿鸡血.真的,被读者认可的感觉,就是这么奇妙. 原文:面试官再问你 Ha ...
- Java集合,ConcurrentHashMap底层实现和原理(常用于并发编程)
为什么80%的码农都做不了架构师?>>> 概述 ConcurrentHashMap常用于并发编程,这里就从源码上来分析一下ConcurrentHashMap数据结构和底层原理. ...
- java concurrentmap原理_Java集合番外篇 -- ConcurrentHashMap底层实现和原理
概述 距离上一次集合篇结束已经过了好久了, 之前说要写一下番外,但是太忙了,总也找不出相对松散的时间,也有点静不下心来,最近花了点时间,于是便有了这篇博客. 在开始之前先介绍一个算法, 这个算法和Co ...
- ConcurrentHashMap底层原理?
本文为面试必备系列篇,不深入叙述,具体细节可自行查询. 可能会问的问题 1.用过ConcurrentHashMap吗? 2.为什么要用ConcurrentHashMap? 3.HashMap与Hash ...
- 深入浅入 ~ ConCurrentHashMap底层原理透析
创作宗旨:化繁为简,绝不冗余,点到为止 ConcurrentHashMap<K,V> 继承了AbstractMap<K,V>,实现了ConcurrentMap<K,V&g ...
- OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)
上一节创建了 vxlan100_net 并部署 instance,今天我们来分析底层网络结构. 控制节点 执行 ovs-vsctl show: br-int br-int 连接了如下 port: ta ...
最新文章
- 基于深度学习的自然图像和医学图像分割:网络结构设计
- 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
- managedwifi.codeplex.com
- 2021高考萧山二中成绩查询,萧山中学2018高考成绩
- 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
- 百度实名制后如何进行网站优化?
- 哪些云计算企业能活下来
- 不恰当使用read会造成服务器阻塞
- 请讲一下浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程
- PW Live直播 | 清华大学​高天宇:对比学习及其在NLP中的应用
- 3.4 svm人脸识别
- vlc android 移植版编译
- Linux服务器的eth,linux做服务器安装两块网卡问题????
- CSS浮动元素的水平居中
- 29 条运维工程师必会实用 Linux 命令
- 查看User Profile的名称和显示名称
- Predict user model based on genus
- mp3音频格式在线转换器 在线转换MP3格式
- C#微信公众号开发实践--通过控制台程序发布图文消息(2020/8/4实测可用)
- 服务器信息 sid,裸金属服务器SID配置
热门文章
- 孔浩老师的CMS项目源码部署问题
- C-Free5注册码,秘钥,解决办法
- 甘特图 知乎_哪一款甘特图软件最好用?
- win10计算机管理字体糊,完美解决:Win10系统字体模糊解决教程
- 23种设计模式总结+清晰图解(必收藏)
- ROS配置环境搞错了,每次开终端都有bash: export: `/home/yyq/ork_ws/devel/setup.bash‘: 不是有效的标识符
- java 刘意 2018_2018刘意油画●水彩作品展
- python遗传算法
- MySQL数据类型详解
- ArcScene:构建三维地图