ConcurrentHashMap 原理

ConcurrentHashMap

  • ConcurrentHashMap的整体架构
  • ConcurrentHashMap的基本功能
  • ConcurrentHashMap在性能方面的优化

concurrentHashMap:

ConcurrentHashMap的整体架构

concurrentHashMap是由数组+链表+红黑树组成
在这里插入图片描述
当我们初始化一个ConcurrentHashMap实例时,默认会初始化一个长度为16的数组。
当发生hash冲突时,会使用链式方式解决。
当链式长度大于8且数组长度大于64 并且负载因子达到0.75的时候,链表会转成红黑树。
随着concurrentHashMap的动态扩容,一旦链表长度小于8,红黑树会退化成单向链表。

ConcurrentHashMap的基本功能

ConcurrentHashMap本质就是一个hashMap,因此功能和HashMap一样,但是ConcurrentHashMap在HashMap的基础上提供了并发安全的实现。

并发安全的主要实现是通过对指定的Node节点加锁,来保证数据更新的安全性
在这里插入图片描述

ConcurrentHashMap在性能方面的优化

如果在并发性能和数据安全之间做好平衡,在很多地方都有类似的设计,比如cpu的三级缓存,mysql的buffer_pool,synchronzie的锁升级等。
ConcurrentHashMap优化:
1,在jdk1.8中,concurrentHashMap锁的粒度是数组中的某一个节点,而在JDK1.7中,锁定的是segment,锁的范围更大,因此性能会更低。
2,引入了红黑树,降低了数据查询的时间复杂度,Ologn
3,当数组长度长度不够时,ConcurrentHashMap会对数组进行扩容,在扩容的实现上,ConcurrentHashMap引入了多线程并发扩容机制。
简单来说就是多线程对原是数组进行分片后,每个线程负责一个分片的数据迁移,从而提升了扩容过程中的数据迁移效率
在这里插入图片描述
4,concurrentHashMap中有一个Size()方法来获取总的元素个数,在多线程并发场景中,在保正原子性的情况下实现元素个数的累加,性能时非常低的。
当并发不高时,直接采用CAS实现元素个数的原子递增。
如果线程竞争激烈,使用一个数组来维护元素个数,如果要增加总的元素个数,则直接从数组中随机取一个,在通过CAS实现原子递增,他的核心思想是引入数组来实现对并发更新的负载
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/634262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于74LS191+74LS160的8位二进制转BCD码应用电路设计

一、74LS191简介: 74LS191为可预置的四位二进制加/减法计数器,RCO进位/借位输出端,MAX/MIN进位/借位输出端,CTEN计数控制端,QA-QD计数输出端,U/D计数控制端,CLK时钟输入端,LOAD异步并行置入端(低电平有效)。 二、74LS191功能表: 三、74LS191逻辑框图: 四、74LS160…

美易官方:贝莱德预计美联储将在6月份开始降息,欧洲央行紧随其后

正文: 根据贝莱德的最新预测,美联储将在6月份开始降息,这一消息早于欧洲央行的预期。贝莱德高级投资策略师Laura Cooper表示:“我们更倾向于6月份降息、然后重新校准政策。”预计美联储在年底前将会降息75至100个基点。 与此同时…

2024美赛数学建模思路 - 案例:异常检测

文章目录 赛题思路一、简介 -- 关于异常检测异常检测监督学习 二、异常检测算法2. 箱线图分析3. 基于距离/密度4. 基于划分思想 建模资料 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 一、简介 – 关于异常…

2024年【裂解(裂化)工艺】考试题及裂解(裂化)工艺免费试题

题库来源:安全生产模拟考试一点通公众号小程序 裂解(裂化)工艺考试题参考答案及裂解(裂化)工艺考试试题解析是安全生产模拟考试一点通题库老师及裂解(裂化)工艺操作证已考过的学员汇总&#xf…

CentOS7 配置静态IP

目录 在解决了刚安装不能联网后配置静态IP1.查看配置好网卡后,DHCP动态分配的IP地址2. 查看网关3. 更改IP地址文件4. 重启网络服务5. 检查配置6. 更新路由(如果需要) 在解决了刚安装不能联网后 解决centos 7刚安装不能联网 配置静态IP 在 C…

程序员遇到不会的问题怎么办

程序员遇到不会的问题怎么办:回答一: 1.百度调试软件 2.杰凡IT有偿问答平台,为广大程序员朋友提供一个高效解决问题的渠道。在这里您可以发布自己的问题,也可以为别人解决问题赚点钱。还可以搞自学指导带徒弟。 网站网址&#xff…

git add -u 什么意思

git add -u 是 Git 命令的一部分,用于将已跟踪的文件的修改添加到暂存区(也称为索引)。这个命令只关注那些已经被 git 跟踪的文件,即那些在之前的提交中已经被添加到仓库的文件。 具体来说: git add -u 会将所有已跟…

阿里云容器服务助力万兴科技 AIGC 应用加速

作者:子白(顾静) 2023 年堪称是 AIGC 元年,文生图领域诞生了 Stable Diffusion 项目,文生文领域诞生了 GPT 家族。一时间风起云涌,国内外许多企业投身 AIGC 创新浪潮,各大云厂商紧随其后纷纷推…

MySQL---经典SQL练习题

MySQL---经典50道练习题 素材:练习题目:解题: 素材: 1.学生表 Student(SId,Sname,Sage,Ssex) SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 2.课程表 Course(CId,Cname,TId) CId 课程编号,Cname 课程名称,TId 教师编号 3.教师表 Teacher(T…

【LeetCode】225. 用队列实现栈(简单)——代码随想录算法训练营Day10

题目链接:225. 用队列实现栈 题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。 实现 MyStack 类: void push(int x) 将元素…

C++初阶类与对象(二):详解构造函数和析构函数

上次为类与对象开了一个头:C初阶类与对象(一):学习类与对象、访问限定符、封装、this指针 今天就来更进一步 文章目录 1.类的6个默认成员函数2.构造函数2.1引入和概念2.2构造函数特性2.2.1特性1~42.2.2注意2.2.3特性5~72.2.4注意 …

python强大的排列组合库-itertools

一、【说在前面】 看到这篇文章的大兄弟您们好,我们经常说调包侠、CRUD仔,用来鄙视不会自己造轮子的工程师,不过笔者认为python的精髓就是调库。库很快,自己写大概率更慢。调包侠也是有高低贵贱之分的,今天介绍一个特…

Linux网络--- SSH服务

一、ssh服务简介 1、什么是ssh SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在…

OpenCV实战:控制手势实现无触摸拖拽功能

前言: Hello大家好,我是Dream。 今天来学习一下如何使用OpenCV来控制手势,瞬间提升操作体验!跨越界限,OpenCV手势控制拖拽功能现身。 一、主要步骤及库的功能介绍 1.主要步骤 要实现本次实验,主要步骤如下…

Ubuntu 22.04安装使用easyconnect

EasyConnect 百度百科,EasyConnect能够帮助您在办公室之外使用公司内网的所有系统及应用。在您的公司部署深信服远程应用发布解决方案后,您的公司所有业务系统及应用都可以轻松迁移至移动互联网上。您可以通过手机、PAD等智能移动终端随时随地开展您的业…

CodeReview 小工具

大家开发中有没有遇到一个版本开发的非常杂,开发很多个项目,改动几周后甚至已经忘了自己改了些什么,领导要对代码review的时候,理不清楚自己改过的代码,只能将主要改动的大功能过一遍。这样就很容易造成review遗漏&…

牛客月赛86+cf(edu)好题

思路&#xff1a;前缀和双指针 代码&#xff1a; #include <bits/stdc.h> using namespace std; using i64 int64_t; int main() {cin.tie(nullptr)->sync_with_stdio(false);cout << fixed << setprecision(20);int t 1;for (int ti 0; ti < t; …

展锐T618_虎贲T618紫光展锐安卓核心板规格参数

基于紫光展锐八核T618平台的纯国产化方案&#xff0c;采用了开放的智能Android操作系统&#xff0c;并集成了4G网络、2.5G5G双频WIFI(可支持1*1 MIMO)、BLUETOOTH近距离无线传输技术以及GNSS无线定位技术。用户可以根据特定场合的需求&#xff0c;选择合适的嵌入式ARM核心模块&…

Linux命令手册

简介 Multics&#xff08;大而全&#xff09;项目失败&#xff0c;吸取教训启动Unix&#xff08;小而精&#xff09;&#xff0c;Linus Benedict Torvalds受Unix启发开发初始版本Linux内核&#xff0c;Git也由其开发&#xff0c;目的是为了更好的管理Linux内核开发。Unix是商业…

linux第一个小程序 --- 进度条【简洁】

行缓冲区的概念 结果&#xff1a;先输入hello world然后休眠三秒后结束 当去掉’\n“ 后&#xff0c;结果就变成了先休眠三秒&#xff0c;然后打印hello world后结束。 该现象就证明了缓冲区的存在。 当缓冲区中遇到’‘\n’或者缓冲区被写满后才会被打印出来&#xff0c;在第…