ConcurrentHashMap 线程安全

news2024/11/16 2:28:41

JDK1.7

结构

在这里插入图片描述

数据结构是数组+segment对象,采用segment分段锁和CAS保证并发。

加锁

JDK1.7中的ConcurrentHashMap是由 segment数组结构和 HashEntry 数组结构组成,即
ConcurrentHashMap把哈希桶切分成小数组(Segment ),每个Segment 有n个 HashEntry组成。其中,Segment继承了ReentrantLock,所以Segment是一种可重入锁,扮演锁的角色;HashEntry用于存储键值对数据。

JDK1.8

结构

在这里插入图片描述

数据结构和1.8的HashMap一样,是数组+链表+红黑树

加锁

jdk1.8 的ConcurrentHashMap舍弃了1.7的segment分段锁,采用了CAS+sycronized来并发。
将锁的级别控制在了更细粒度的哈希桶元素级别也就是说只需要锁住这个链表头结点(红黑树的根节点),就不会影响其他的哈希桶元素的读写,大大提高了并发度。

区别

1.数据结构:
1.7:数组+segment对象
1.8:数组+链表+红黑树
2.线程安全机制:
1.7:采用Segment的分段锁机制实现线程安全,其中segment继承自ReentrantLock.
1.8:采用CAS+Synchronized保证线程安全.
3.锁的粒度:
1.7:对需要进行数据操作的Segment加锁.
1.8:对每个数组的头节点进行加锁(Node).
4.查询时间复杂度:
1.7:遍历链表O(n).
1.8:遍历红黑树O(logn).

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

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

相关文章

终于!Linaro 加盟 Zephyr 项目

导读为物联网构建实时操作系统的开源协作项目 Zephyr 项目宣布,Linaro 有限责任公司以白金会员的身份加盟该项目。Linaro是一家为 ARM 架构开发开源软件的协作工程组织,也是全球性机构,其 35 个成员中不乏来自多个行业部门的龙头企业。Linaro…

嵌入式实时操作系统的设计与开发(一)

以一款简单、易学的嵌入式开发平台ARM Mini2440(CPU是三星ARM 9系列的ARM S3C2440)为例,通过具体代码实现,介绍如何从裸板入手设计简单的轮询系统、前后台系统,以及如何一步一步在ARM Mini2440上编写RTOS内核&#xff…

Spring之配置非自定义Bean

目录 一:概述 二:代码演示 1)配置Druid数据源交由Spring管理 一:概述 以上在xml中配置的Bean都是自己定义的, 例如:UserDaolmpl, UserServicelmpl。但是, 在实际开发中有些 功能类并不是我们…

包装器和绑定器std::bind和std::function的回调技术

回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在…

低代码搭建门店管理之收发货管理系统

随着电商的深入,不少门店都开始采用线上模式进行销售了,并且有的门店线上销售更是比线下销售更加火爆。因此,线上销售务必会涉及到收发货这个步骤。以前线上销售刚兴起的时候收发货只靠人工纸质化登记就能搞定,但是随着线上销售的…

盘点这些年稚晖君的DIY项目,看看他的技术栈有多强

近日,知名极客稚晖君在个人微博发文称自己将离职创业,开启一段新的旅程,“天才少年”将在机器人领域继续发光发热。 自2020年初发布第一个出圈视频《技术宅UP耗时三个月,自制B站最强小电视!》以来,稚晖君共…

Vue实例的基本属性,computed计算属性,watch监听属性以及过滤器filters

目录 一、Vue实例的属性 二、Vue实例的计算属性:computed。计算属性结果会被缓存起来,当依赖的响应式属性发生变化时,才会重新计算,返回最终结果。 三、Vue实例的状态监听属性:watch,可以对元素的值的变…

JVM垃圾回收相关算法-垃圾标记阶段

文章目录学习资料垃圾回收概念概述垃圾回收相关算法垃圾标记阶段:对象存活判断引用计数算法可达性分析算法(或根搜索算法、追踪性垃圾收集)【Java使用算法】基本思路GC Roots对象的finalization机制对象处于三种可能的状态具体过程学习资料 …

WebDAV之葫芦儿·派盘+WebDAV Nav Lite

WebDAV Nav Lite 支持WebDAV方式连接葫芦儿派盘。 支持连接所有WebDAV服务器、云存储、NAS设备的管理工具,并可以直接管理设备内的文件?那快来试下WebDAV Nav Lite自动同步与管理工具吧。 WebDAV Nav Lite允许您

【Bootstrap】CSS全局样式

目录 一、HTML5文档类型 二、移动设备优先 三、禁用移动设备上的缩放功能 四、布局容器 1. container 类 ​2. container-fluid 类 五、标题 六、页面主体 七、文本 1. 内联文本元素 2. 文本对齐 ​3. 改变大小写 八、列表 1. 无序列表 2. 有序列表 3. 无样式列…

Hadoop数据仓库有哪些特征?

数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。 数据仓库本身并不“生产”任何数据,其数据…

(1分钟)速通BA优化--光束法平差

SLAM中的BA优化,先根据相机模型和A,B图像特征匹配好的像素坐标,求出A图像上的像素坐标对应的归一化的空间点坐标,然后根据该空间点的坐标计算重投影到B图像上的像素坐标,重投影的像素坐标(估计值)与匹配好的B图像上的像素坐标(测量…

java流程控制的三种类型

1. 简介 在Java项目中,大多数的代码都是编写在一个个的类里面。每个类中还有很多个语句,并且会以英文的分号;来表示语句的结束。有些小白会很好奇,这一行行的代码语句是按照什么顺序执行的呢?是按照我们看到的从上到下的顺序执行…

【瑞萨RA4系列】CoreMark移植完全指南——UART输出和SysTick计时的应用

【瑞萨RA4系列开发板体验】CoreMark移植完全指南——UART输出和SysTick计时的应用 文章目录【瑞萨RA4系列开发板体验】CoreMark移植完全指南——UART输出和SysTick计时的应用一、CoreMark简介二、基础功能支持2.1 创建RASC项目2.2 确认UART引脚2.3 打开RASC配置2.4 配置UART引脚…

javac 编译期拓展之实现 CallSuper 注解功能

javac 编译期拓展之 实现 CallSuper 注解功能 背景: 元旦之前,就和朋友探讨了这么一个问题。比如我在一个父类的 a 方法里做了一些逻辑,这个逻辑是必须存在的,假如现在子类要重写这个 a 方法, 那么他就需要先调用父类…

docker(一):基本组成与常用命令

文章目录1. docker基本组成1.1 镜像(image)1.2 容器(container)1.3 仓库(repository)2. docker常用命令2.1 启动类命令2.2 镜像命令2.3 容器命令1. docker基本组成 1.1 镜像(image) docker镜像(image)就是一个只读的模板。镜像可以用来创建docker容器,一个镜像可以…

中职组网络安全2023年山东省省赛Linux 系统渗透提权

B-3:Linux 系统渗透提权 任务环境说明: 服务器场景:Server2204(关闭链接) 用户名:hacker 密码:123456 使用渗透机对服务器信息收集,并将服务器中 SSH 服务端口号作为 flag 提 交;Flag:2283/tcp 使用渗透机对服务器信息收集,并将服务器中主机名称作为 flag 提交;F…

通过keepalived实现高可用

192.168.184.128 主/heartbeat1 192.168.184.129 从/heartbeat2 192.168.184.131 漂移地址 主备基础:需要在128和129服务器上,搭建mysql主从复制 环境基础配置 128、129操作关闭防火墙 # sed -i "s/SELINUXenforcing/SELINUXdisabled/g"…

内卷加速的手机市场,如何寻找新契机?

从此前争相入局的一亿像素摄像头,到不断加码的快充、屏幕刷新率,再到眼下不那么成熟却“硬要上阵”的屏下摄像头技术,原本应该通过技术创新提升用户体验的手机行业,变得越来越内卷,业内人士分析认为手机内卷造成消费者…

【阶段二】Python数据分析Pandas工具使用04篇:数据预处理:数据的汇总

本篇的思维导图: 数据预处理:数据的汇总 数据透视表pivot_table()函数 透视表功能该功能的主要目的就是实现数据的汇总统计。pandas模块中的pivot_table函数就是实现透视表功能的强大函数。 代码 import numpy as