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底层结构分析相关推荐

  1. ConcurrentHashMap 底层原理,你真的理解了吗?

    ConcurrentHashMap 是 HashMap 的线程安全版本,与之前版本的ConcurrentHashMap实现来看,java 8中做了较大调整,本文仅分析java 8的实现,java 8 ...

  2. ConcurrentHashMap底层详解(图解扩容)(JDK1.8)

    数据结构 使用数组+链表+红黑树来实现,利用 CAS + synchronized 来保证并发更新的安全 源码分析 put方法 public V put(K key, V value) {return ...

  3. 并发编程三:深入理解并发List、Set、ConcurrentHashMap底层原理

    深入理解并发List.Set.ConcurrentHashMap底层原理 之前两篇分析了并发的三大特性和JMM模型,从硬件.jvm.java层面分别进行分析.JMM模型是并发当中最难理解的部分,涉及到 ...

  4. Java中ConcurrentHashMap底层实现原理(JDK1.8)源码分析2

    https://blog.csdn.net/programmer_at/article/details/79715177 https://blog.csdn.net/qq_41737716/categ ...

  5. 嘿嘿,我就知道面试官接下来要问我 ConcurrentHashMap 底层原理了,看我怎么秀他...

    来自:烟雨星空 前言 上篇文章介绍了 HashMap 源码后,在博客平台广受好评,让本来己经不打算更新这个系列的我,仿佛被打了一顿鸡血.真的,被读者认可的感觉,就是这么奇妙. 原文:面试官再问你 Ha ...

  6. Java集合,ConcurrentHashMap底层实现和原理(常用于并发编程)

    为什么80%的码农都做不了架构师?>>>    概述 ConcurrentHashMap常用于并发编程,这里就从源码上来分析一下ConcurrentHashMap数据结构和底层原理. ...

  7. java concurrentmap原理_Java集合番外篇 -- ConcurrentHashMap底层实现和原理

    概述 距离上一次集合篇结束已经过了好久了, 之前说要写一下番外,但是太忙了,总也找不出相对松散的时间,也有点静不下心来,最近花了点时间,于是便有了这篇博客. 在开始之前先介绍一个算法, 这个算法和Co ...

  8. ConcurrentHashMap底层原理?

    本文为面试必备系列篇,不深入叙述,具体细节可自行查询. 可能会问的问题 1.用过ConcurrentHashMap吗? 2.为什么要用ConcurrentHashMap? 3.HashMap与Hash ...

  9. 深入浅入 ~ ConCurrentHashMap底层原理透析

    创作宗旨:化繁为简,绝不冗余,点到为止 ConcurrentHashMap<K,V> 继承了AbstractMap<K,V>,实现了ConcurrentMap<K,V&g ...

  10. OVS vxlan 底层结构分析 - 每天5分钟玩转 OpenStack(148)

    上一节创建了 vxlan100_net 并部署 instance,今天我们来分析底层网络结构. 控制节点 执行 ovs-vsctl show: br-int br-int 连接了如下 port: ta ...

最新文章

  1. 基于深度学习的自然图像和医学图像分割:网络结构设计
  2. 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
  3. managedwifi.codeplex.com
  4. 2021高考萧山二中成绩查询,萧山中学2018高考成绩
  5. 贝叶斯推断及其互联网应用(二):过滤垃圾邮件
  6. 百度实名制后如何进行网站优化?
  7. 哪些云计算企业能活下来
  8. 不恰当使用read会造成服务器阻塞
  9. 请讲一下浏览器从接收到一个URL,到最后展示出页面,经历了哪些过程
  10. PW Live直播 | 清华大学​高天宇:对比学习及其在NLP中的应用
  11. 3.4 svm人脸识别
  12. vlc android 移植版编译
  13. Linux服务器的eth,linux做服务器安装两块网卡问题????
  14. CSS浮动元素的水平居中
  15. 29 条运维工程师必会实用 Linux 命令
  16. 查看User Profile的名称和显示名称
  17. Predict user model based on genus
  18. mp3音频格式在线转换器 在线转换MP3格式
  19. C#微信公众号开发实践--通过控制台程序发布图文消息(2020/8/4实测可用)
  20. 服务器信息 sid,裸金属服务器SID配置

热门文章

  1. 孔浩老师的CMS项目源码部署问题
  2. C-Free5注册码,秘钥,解决办法
  3. 甘特图 知乎_哪一款甘特图软件最好用?
  4. win10计算机管理字体糊,完美解决:Win10系统字体模糊解决教程
  5. 23种设计模式总结+清晰图解(必收藏)
  6. ROS配置环境搞错了,每次开终端都有bash: export: `/home/yyq/ork_ws/devel/setup.bash‘: 不是有效的标识符
  7. java 刘意 2018_2018刘意油画●水彩作品展
  8. python遗传算法
  9. MySQL数据类型详解
  10. ArcScene:构建三维地图