由于项目中常用的集合是hashMap和conCurrentHashMap,hashMap的源码之前已经写过  ,今天看下conCurrentHashMap的存取和两者之间的一些比较。

    conCurrentHashMap(jdk1.7和1.8的变化)

 在jdk1.7以及之前ConcurrentHashMap采用的是Segment+HashEntry的分段锁策略进行设计的 ,Segment继承 了可重入锁,在1.8中改变了这一设计  将HashEntry改为和HashMap一样的Node节点 作为基本变量  还是数组+链表+红黑树的设计手法。

在这张图片 的注释中可以看到 在一个hash槽存放8个节点的可能性为小于百万分之一,所以节点个数一般按7为分界线 将小于7(小于6退化为链表),大于等于8存放到红黑树中。

首先根据传入的key进行hash运算找到对应的链表节点或者说红黑树节点(都是用Node存的) 对当前链表节点进行判断key,如果key和key'的hash运算都是相同的 ,那就说明是要替换掉这个值 如代码中,直接将值进行更新,否则 将整个节点替换到当前节点的next。在此之前首先要先判断是否要进行扩容 以为concurrentHasmap和HashMap一样有加载因子和初始容量。

helpTransfer这个方法是进行重组的方法 往里看的话 再存入节点的循环中也对节点加了synchronized进行加锁处理,保证并发状态下的线程安全。  因为HashMap线程不安全也是因为存值的时候扩容有可能导致链表的内循环。

取值相对简单 跟hashMap差别不大,读取值不需要加锁。

有个疑问是为什么ConcurrentHashMap不使用Lock进行加锁  而是使用synchronized?

concurrentHashMap源码略读相关推荐

  1. ConcurrentHashMap源码分析(2)——JDK1.8的实现

    ConcurrentHashMap源码分析(1)--JDK1.7的实现 前言 在JDK1.7版本上,ConcurrentHashMap还是通过分段锁来实现的,Segment的数量制约着并发量.在JDK ...

  2. ConcurrentHashMap源码分析(1)——JDK1.7的实现

    ConcurrentHashMap源码分析 ConcurrentHashMap源码分析(2)--JDK1.8的实现 前言 ConcurrentHashMap是线程安全且高效的HashMap的实现,在并 ...

  3. JDK8中ConcurrentHashMap源码解析

    在介绍ConcurrentHashMap源码之前,首先需要了解以下几个知识 1.JDK1.8中ConcurrentHashMap的基本结构 2.并发编程的三个概念:可见性,原子性,有序性 3.CAS( ...

  4. ConcurrentHashMap源码学习

    ConcurrentHashMap源码学习 自从学习了AQS之后,想着重新读一下ConcurrentHashMap的源码来加深下理解,所以有了这篇文章,针对ConcurrentHashMap常用的方法 ...

  5. ConcurrentHashMap源码剖析(1.8版本)

    目录 ConcurrentHashMap源码剖析 数据结构 Node ForwardingNode TreeNode TreeBin 核心成员 核心函数 ConcurrentHashMap(int i ...

  6. 面试官系统精讲Java源码及大厂真题 - 16 ConcurrentHashMap 源码解析和设计思路

    16 ConcurrentHashMap 源码解析和设计思路 与有肝胆人共事,从无字句处读书. 引导语 当我们碰到线程不安全场景下,需要使用 Map 的时候,我们第一个想到的 API 估计就是 Con ...

  7. JDK1.8 中 ConcurrentHashMap源码分析(一)容器初始化

    上一篇文章中说到如何使用IDEA搭建JDK1.8阅读学习环境,JDK1.8源码下载及获取.导入IDEA阅读.配置JDK源码.这篇文章将学习ConcurrentHashMap源码

  8. ConcurrentHashMap源码跟踪记录

    2019独角兽企业重金招聘Python工程师标准>>> concurrentHashMap源码解读 主要理解几个问题1 ConcurrentHashMap如何实现分段锁2 存取数据是 ...

  9. ConcurrentHashMap源码分析,轻取面试Offer(一)

    ConcurrentHashMap 这里主要分析的 jdk1.8中的ConcurrentHashMap,他是java之父Doug Lea之作,很多优秀的开源框架如tomcat.spring.中都大量用 ...

最新文章

  1. 纪念:2006年我在51CTO的第一帖
  2. 如何用python画出中国地图-用Python画一个中国地图
  3. 如何在win2003下安装sql2008[多次安装sql2008失败者必看]
  4. 如何使用TensorFlow对象检测API播放Quidditch
  5. python使用函数目的_Python函数的概念和使用
  6. MFC中如何将焦点设置到指定控件上
  7. 用vs.net 调试传统ASP程序
  8. 趣学 C 语言(四)—— 字符串与字符数组
  9. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(15)之前台网站页面
  10. veevalidate的使用3.X版本
  11. MSYS2 安装和配置
  12. 《推荐系统实践》算法纯享(附代码链接)(一)—— 评价指标篇
  13. java流程图怎么画_计算机流程图怎么画
  14. 均匀半空间视电阻率MATLAB代码,均匀半空间中心回线瞬变电磁法正演研究
  15. 请仔细核对自己的信息
  16. dwc_pcie iip 代码分析
  17. 宣化科技职业学院计算机哪个校区,宣化科技职业学院宿舍怎么样
  18. CPU卡的一个发卡详细过程
  19. 完整 Python中切片说明 arr [start: end: step] (arr [-1]、arr[:-1]、arr [::-1] 等的区别)
  20. MySQL 出现数据库表被锁解决方案

热门文章

  1. 吞吐量和响应时间的关系
  2. 《软技能·代码之外的生存指南》读书笔记 ——健身
  3. 算法竞赛入门【码蹄集进阶塔335题】(MT2311-2315)
  4. 由于没有公钥,无法验证下列签名:一步解决
  5. 金钱观与经济状况的一致性
  6. B2B企业的网络营销日常工作内容有哪些?
  7. 2022年湖南省一级注册建筑师设计前期与场地设计备考模拟题及答案
  8. A100 GPU服务器安装GPU驱动教程
  9. H3C简单的防火墙配置
  10. 一 创建一个springboot项目之(微信点餐系统的设计与开发)