【juc】ConcurrentHashMap

目录

        • 1.说明
        • 2.基本结构
        • 3.线程安全机制
          • 3.1 分段锁
          • 3.2 CAS操作
          • 3.3 volatile关键字
        • 4.扩容机制
        • 5.其他特性

1.说明
  • 1.ConcurrentHashMap是Java中的一个线程安全的哈希表实现。
  • 2.ConcurrentHashMap的底层结构主要由数组链表红黑树组成。
  • 3.在JDK 1.8及之后的版本中,ConcurrentHashMap使用这些数据结构来存储键值对,并通过散列算法来确定键值对在数组中的位置。
  • 4.ConcurrentHashMap通过分段锁、CAS操作、volatile关键字机制来保证线程安全。
  • 5.当ConcurrentHashMap中的元素数量超过一定阈值时,会触发扩容操作。
2.基本结构
  • 1.数组:ConcurrentHashMap的初始数组长度通常为16(默认值),这个数组用于存储Node节点,每个Node节点包含一个key-value对。
  • 2.链表:当多个键值对通过散列算法计算得到的索引相同时,它们会被存储在同一个数组位置上的链表中。在JDK 1.8中,链表使用尾插法插入新节点。
  • 3.红黑树:当链表中的节点数量超过一定阈值(默认为8),并且数组长度大于64时,链表会转换为红黑树。红黑树的引入降低了数据查询的时间复杂度,从O(n)降低到O(logn)。
3.线程安全机制
3.1 分段锁
  • 1.Segment Lock。
  • 2.在JDK 1.7及之前的版本中,ConcurrentHashMap使用分段锁机制将整个哈希表分成多个段(Segment),每个段维护一个独立的锁。
  • 3.不同的线程可以同时访问不同的段,提高了并发性能。
  • 4.但在JDK 1.8及之后的版本中,虽然概念上仍然保留了分段锁的思想,但实际上是通过更细粒度的锁(如CAS操作和synchronized关键字对链表头节点的加锁)来实现的。
3.2 CAS操作
  • 1.在JDK 1.8中,ConcurrentHashMap在更新元素时使用了无锁算法CAS(Compare-And-Swap),这是一种硬件级别的原子操作,可以确保在多线程环境下数据的正确性和一致性。
3.3 volatile关键字
  • 1.ConcurrentHashMap中的数组(table)被volatile关键字修饰,这保证了在多线程环境下数组的可见性。
  • 2.当一个线程修改了数组的内容时,其他线程可以立即看到这个修改。
4.扩容机制
  • 1.计算新容量:根据当前的容量和负载因子计算出新的容量。
  • 2.重新分配数组:创建一个新的数组,其长度为新容量的值。
  • 3.数据迁移:将旧数组中的数据迁移到新的数组中。在JDK 1.8中,引入了多线程并发扩容的机制,多个线程可以同时对原始数组进行分片后,每个线程负责一个分片的数据迁移,从而提升了扩容过程中数据迁移的效率。
5.其他特性
  • 1.不允许空键或空值:ConcurrentHashMap不允许为空(null),如果尝试插入空键或空值,会抛出NullPointerException。
  • 2.高效的读操作:由于ConcurrentHashMap的读操作是线程安全的,且不需要获取锁,因此读操作在没有竞争的情况下几乎没有性能损耗。
  • 3.支持原子操作:ConcurrentHashMap提供了一些原子操作,如putIfAbsent、remove、replace等,这些操作可以在不需要额外的同步措施的情况下执行。

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

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

相关文章

数据湖与数据仓库的区别

数据湖与数据仓库是两种不同的数据存储和管理方式,它们在多个方面存在显著的区别。以下是对数据湖与数据仓库区别的详细阐述: 一、数据存储方式 数据仓库 通常采用预定义的模式和结构来存储数据。数据在存储前通常经过清洗、转换和整合等处理&#xff0…

数据结构PTA

20:C 22:B 27:D 填空 4-2:19 4-4:66 4-5:8 5-x:不加分号 ⬇:top p->next 编程 单链表 每个节点除了存放数据元素外,还要存储指向下一节点的指针…

有哪些机器学习实战?——AI实战指南

机器学习已经从理论走向实际应用,各行业的公司和个人都希望通过机器学习来解决现实问题,提升效率。那么,有哪些值得学习和实践的机器学习项目呢?以下将介绍几类热门的机器学习实战项目,涵盖了推荐系统、图像识别、自然…

go语言中的通道(channel)详解

在 Go 语言中,通道(channel) 是一种用于在 goroutine(协程)之间传递数据的管道。通道具有类型安全性,即它只能传递一种指定类型的数据。通道是 Go 并发编程的重要特性,能够让多个 goroutine 之间…

Flutter-Padding组件

1. 说明 在html中常见的布局标签都有padding属性,但是Flutter中很多Widget是没有padding属性。这个时候 我们可以用Padding组件处理容器与子元素之间的间距 2. 属性 padding:padding值, EdgeInsetss设置填充的值 child:子组件 3. …

多叉树笔记

1 多叉树定义 多叉树是一种树形结构,它有一个特定的节点被称为“根”节点,而每个节点(除了根节点)恰好有一个前驱节点(父节点)。在有根多叉树中,每个节点可以拥有任意数量的后继节点&#xff0…

框架学习04-Spring 事务

1. 事务的基本概念 定义:事务是一组数据库操作的集合,这些操作要么全部成功执行,要么全部不执行。它是为了保证数据的一致性和完整性。例如,在一个银行转账系统中,从一个账户扣款和向另一个账户收款这两个操作应该作为…

【学术会议介绍,SPIE 出版】第四届计算机图形学、人工智能与数据处理国际学术会议 (ICCAID 2024,12月13-15日)

第四届计算机图形学、人工智能与数据处理国际学术会议 2024 4th International Conference on Computer Graphics, Artificial Intelligence and Data Processing (ICCAID 2024) 重要信息 大会官网:www.iccaid.net 大会时间:2024年12月13-15日 大会地…

2-UML概念模型测试

1. (单选题, 1.0 分) UML中的关系不包括()。 A. 抽象B. 实现C. 依赖D. 关联 我的答案:A正确答案: A 知识点: UML的构成 1.0分 2. (单选题, 1.0 分) 下列事物不属于UML结构事物的是()。 A. 组件B. 类C. 节点D. 状…

【go从零单排】Command-Line Flags、Command-Line Subcommands命令行和子命令

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在 Go 语言中,命令行标志(Command-Line Flags&#xff09…

WEB攻防-通用漏洞SQL读写注入MYSQLMSSQLPostgraSQL

知识点: 1、SQL注入-MYSQL数据库; 2、SQL注入-MSSQL数据库; 3、SQL注入-PostgreSQL数据库; 首先要找到注入点 详细点: Access无高权限注入点-只能猜解,还是暴力猜解 MYSQL,PostgreSQL&am…

自定义springCloudLoadbalancer简述

概述 目前后端用的基本都是springCloud体系; 平时在dev环境开发时,会把自己的本地服务也注册上去,但是这样的话,在客户端调用时请求可能会打到自己本地,对客户端测试不太友好. 思路大致就是前端在请求头传入指定ip&a…

腾讯云11.11云服务器活动--上云拼团GO

目录 云服务器活动介绍: 轻量服务器 上GO拼团领券 云服务器购买 HAI现金券 学生专享GPU 活动总结 云服务器活动介绍: 双十一临近,这是您一年中最期待的购物狂欢时刻。作为国内领先的云计算服务商,腾讯云诚挚为您呈献前所未有的优惠福利,助您在这…

防脱生发最有效的产品,测评总结早看少踩雷

别人脱单、脱贫你脱发,就问你心酸不心酸?探索防脱之路确实不易,到底怎么才能有效防脱养发呢,很有必要分享一下我多年的防脱心得,这几款一直在用的防脱育发好物,秃头朋友们可以看看~ **露卡菲娅防脱精华液**…

c++:string(一)

文章目录 一string类1C语言中的字符串2C中的string二遍历1[ ]2迭代器3const迭代器4范围for5auto6总结三String的尾插1size和length2max_size,capacity和clear3访问接口4尾插字符和字符串5 append的重载三string的扩容问题(1)怎么扩容(2&#…

【2048】我的创作纪念日

机缘 2048天,不知不觉来csdn博客已经有2048天了,其实用csdn平台很久了,实际上写博客还是从2019年开始。 还记得最初成为创作者初心是什么吗? 最开始,主要是用来做笔记。平时工作中、学习中遇到的技术相关问题都会在cs…

壁仞科技上市前最后一波 校招 社招 内推

随着美国大选结束,国内GPU 产业得到空前的的发展空间,国内芯片相关股票一片飘红。 国内大型 GPU厂商壁仞科技,摩尔线程等正紧锣密鼓地加紧上市。 GPGPU 芯片赛道来到了史无前例的红利点,抓住机会💪 壁仞科技正在火热…

sql server 自动kill 查询超过20分钟的语句

起源于同事的烂sql 容易拖垮 数据服务器, 周末没有人监控数据库,好几次导致主从数据库同步失败 ,不得不自动kill 烂sql 语句如下 : -- 声明变量来存储超过20分钟的查询的会话ID DECLARE kill_sessions TABLE (session_id INT); …

GMS地下水数值模拟、全流程各工程类型地下水环境影响评价、MODFLOW Flex

GMS地下水数值模拟技术及在地下水环评中的应用 以地下水数值模拟软件GMS10.1操作为主要内容,在教学中强调三维地质结构建模、水文地质模型概化、边界条件设定、参数反演和模型校核等关键环节。不仅使学员掌握地下水数值模拟软件GMS10.1的全过程实际操作技术的基本技…

基于Multisim水箱水位控制系统仿真电路(含仿真和报告)

【全套资料.zip】水箱水位控制系统仿真电路Multisim仿真设计数字电子技术 文章目录 功能一、Multisim仿真源文件二、原理文档报告资料下载【Multisim仿真报告讲解视频.zip】 功能 1.在水箱内的不同高度安装3根金属棒,以感知水位变化情况, 液位分1&…