ConcurrentHashMap原理,jdk7和jdk8版本的区别

2023-10-27

ConcurrentHashMap原理,jdk7和jdk8版本的区别

jdk7:

  • 数据结构: ReentrantLock+Segment+HashEntry,一个Segment中包含一个类似于HashMap的结构,数组+链表

  • 元素查询:二次hash,第一次Hash定位到Segment,第二次Hash定位到元素所在的链表的头部

  • 锁: Segment分段锁Segment继承了ReentrantLock,锁定操作的Segment,其他的Segment不受影响,并发度为segment个数,可以通过构造函数指定,数组扩容不会影响其他的segment

  • get方法无需加锁,volatile保证,扩容的时候,扩容segment加锁 非扩容的segment可以正常访问,数组本身用volatile修饰,读操作不会读到脏数据

  • 1.7 分段加锁 只锁住一个segment segment有多少个就允许多少个segment并发操作

jdk8:

  • 数据结构: synchronized+CAS+Node+红黑树,Node的val和next都用volatile修饰,保证可见性查找,替换,赋值操作都使用CAS
  • 锁:锁链表的head节点,不影响其他元素的读写,锁粒度更细,效率更高,扩容时,阻塞所有的读写操作、并发扩容
  • 读操作无锁:
  • Node的val和next使用volatile修饰,读写线程对该变量互相可见数组用volatile修饰,保证扩容时被读线程感知

concurrentHashmap 1.8 扩容的时候允许多个线程一起扩容

1.8由于sy的性能得到提升,currenthash不再使用reentrantlock 而是使用syn+cas锁

读操作依旧没有锁

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ConcurrentHashMap原理,jdk7和jdk8版本的区别 的相关文章

随机推荐

  • Spring Boot + Disruptor

    首先了解一下Disrupto的背景 Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列 研发的初衷是解决内存队列的延迟问题 在性能测试中发现竟然与I O操作处于同样的数量级 基于 Disruptor 开发的系统单线程能支撑每
  • linux学习——awk ‘{print $2}‘ 这个命令是什么意思?

    2 表示第二个字段 print 2 打印第二个字段 awk print 2 fileName 一行一行的读取指定的文件 以空格作为分隔符 打印第二个字段 比如有这样一个文件 a1 b1 c1 d1 a2 b2 c2 d2 执行的结果是 输出
  • 工信部印发互联网+行动计划 聚焦智能制造

    工信部印发 工业和信息化部关于贯彻落实 lt 国务院关于积极推进 互联网 行动的指导意见 gt 的行动计划 2015 2018年 意见提出总体目标 到2018年 互联网与制造业融合进一步深化 制造业数字化 网络化 智能化水平显著提高 其中提
  • 使用正则去掉html标签

    在开发项目的时候 会有去掉html标签只提取文字内容的情况 在此做个记录 以免之后找不到 1 匹配 lt 开始 gt 结束的全局正则 var regex lt gt gt ig 2 body内部的p标签 body p 我是文本内容 p 3
  • PostgreSQL数据库

    0 安装 我使用的操作系统为Ubuntu 安装命令 sudo apt get update sudo apt get install postgresql postgresql client 进入postgres sudo i u post
  • 如何用C语言编写暴力破解压缩文件解压密码的程序

    由于有一个重要的Rar文件 极需解开 首先试用了ARPC 但是解压的速度极慢 每秒只有30个左右 所以断了穷举破解的念头 却仍不死心 因为我从不崇尚穷举破解的方法 除非每秒可以跑几千万次的 我或许可以一试 所以决定研究一下Winrar 3
  • 在教育领域中使用ChatGPT有哪些优点?

    人工智能在教育领域的应用正在迅速增加 OpenAI于2022年11月开发的聊天机器人ChatGPT在全球范围内广受欢迎 由于其受欢迎程度以及生成类似人类问题的回答的能力 ChatGPT正在成为许多学习者和教育工作者值得信赖的伴侣 然而 与任
  • 可变68键,GANSS新版ALT71即将上市

    优化生产供应链后的GANSS 迦斯 去年下半年至今陆续成功升级C D系产品 在更优质的生产端支持下 近日 GANSS 迦斯 发布全新设计的ALT71机械键盘 独树一帜的可变配列 71键 68键 搭载升级蓝牙5 0 低功耗高续航 首发热升华版
  • 贪心——装箱问题

    贪心 装箱问题 题目描述 有一个箱子容量为V 正整数 0 V 20000 同时有n个物品 0 n 30 每个物品有一个体积 正整数 要求n个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入描述 1个整数 表示箱子容量 1个整数 表示
  • 三目运算符的嵌套使用

    文件名 ChooseTest java 描述 练习条件运算符 三目运算符 的嵌套 学习成绩 gt 90分的同学用A表示 60 89分 之间的用B表示 60分以下的用C表示 作者 kyx 时间 2019 01 03 备注 初稿 import
  • matlab做出自相关图,在matlab中实现图像的自相关和互相关

    图像的自相关 clear I1 imread lenna bmp bmp 输入图像1 参考图像 I1 I1 1 figure 1 显示输入图像1 colormap gray 255 image I1 axis off FI1 fft2 I1
  • AD导出3D模型的各种方法——AD转SW(贴图形式)

    所有方法的链接 1 AD转SW 贴图形式 2 AD转SW MCAD插件一键生成 也适用于Fusion360 Inventor等三维建模软件 3 AD转Keyshot 待写 4 AD转PPT 待写 目录 所有方法的链接 一 前情提要 二 使用
  • 【转】NAT技术基本原理与应用

    转自 https www cnblogs com mefj p 10578639 html 1 概述 1 1 简介 1 1 1 名词解释 公有IP地址 也叫全局地址 是指合法的IP地址 它是由NIC 网络信息中心 或者ISP 网络服务提供商
  • CISP题目练习

    CISP题目练习 知识点 风险计算原理可以用下面的范式形式化地加以说明 风险值 R A T V R L T V F Ia Va R表示安全风险计算函数 A表示资产 T表示威胁 V表示脆弱性 Ia表示安全事件所作用的资产价值 Va表示脆弱性严
  • 稳压二极管的使用

    稳压二极管又叫齐纳二极管 利用pn结反向击穿状态 其电流可在很大范围内变化而电压基本不变的现象 制成的起稳压作用的二极管 稳压管主要被作为稳压器或电压基准元件使用 上面都是抄的 实际使用稳压二极管的时候才发现有问题 稳压二极管并不是能够理想
  • 使用JDBC连接数据库(一)

    JDBC是由java编程语言编写的类及接口组成 同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API 并支持SQL语言 利用JDBC可以将JAVA代码连接到oracle DB2 SQLServer MYSQL等数据库 从而实
  • 线程池的实现原理、并发和并行

    线程池参数详解 https blog csdn net daiqinge article details 51179445 例题 比如现在设置coreSize 5 maxSize 10 blockQueueSize 10 依次提交6个比较耗
  • 矩阵的转置,逆矩阵,行列式的计算,伴随矩阵等

    行列式的操作 逆矩阵 就是两个矩阵相乘是单位矩阵 对角矩阵相乘 就是对角线元素相乘 当两个矩阵相乘不是单位矩阵 伴随矩阵 是有代数余子式拼成的 为什么伴随矩阵会出现 为什么伴随矩阵的形式是这样的 因为行列式的乘法 根据矩阵的乘法可以看到 行
  • java中静态方法中调用非静态方法的详解

    静态static方法中不能调用非静态 non static 方法 准确地说是不能直接调用non static方法 但是可以通过将一个对象的引用传入static方法中 再去调用该对象的non static方法 其实这个事实的应用很经常 以至于
  • ConcurrentHashMap原理,jdk7和jdk8版本的区别

    ConcurrentHashMap原理 jdk7和jdk8版本的区别 jdk7 数据结构 ReentrantLock Segment HashEntry 一个Segment中包含一个类似于HashMap的结构 数组 链表 元素查询 二次ha