【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁

🍎个人博客:个人主页
🏆个人专栏: JAVA
⛳️ 功不唐捐,玉汝于成

目录
前言
正文
分段锁的好处:
结语
我的其他博客
前言
在Java 8中,
ConcurrentHashMap的实现经历了重大的改进,其中最引人注目的变化之一就是舍弃了传统的分段锁机制,转而采用了基于CAS操作的新型分段锁设计。这一变革使得ConcurrentHashMap更好地适应了高并发环境,充分发挥了现代多核处理器的性能潜力。本文将深入探讨为何在Java 8中舍弃传统分段锁,以及新设计的优势和影响。
正文
Java 8中的ConcurrentHashMap引入了新的实现方式,即采用了基于CAS (Compare and Swap) 操作的分段锁的设计,而不再使用Java 7及之前版本中的传统分段锁。
Java 8 ConcurrentHashMap的设计采用了一种更加细粒度的锁机制,即将整个Map分为多个段(segment),每个段维护一部分键值对。相比于整个Map使用一个大锁的传统方式,这种分段锁的设计可以降低锁的粒度,提高并发性能。
分段锁的好处:
-
细粒度的锁: 每个段都有自己的锁,这样在多线程环境中只有在需要同步的地方才会进行锁的竞争,降低了锁的争用情况。
-
提高并发性能: 因为只有在操作同一个段的时候才会出现锁竞争,所以各个段之间的操作可以并行执行,提高了并发性能。
-
减小锁的持有时间: 操作只需要对影响的段进行加锁,而不是整个Map,减小了锁的持有时间,提高了并发度。
-
减小了死锁的可能性: 锁的范围缩小到了每个段,降低了死锁的可能性。
总体来说,Java 8中的ConcurrentHashMap采用分段锁的设计是为了更好地支持高并发的场景,提高了程序的性能和并发度。这种设计的优势在于能够在保证线程安全的同时,最大程度地减小锁的争用,提高并发性能。
结语
通过舍弃传统的分段锁,Java 8中的
ConcurrentHashMap迈出了更为灵活和高效的一步。新的基于CAS的分段锁设计在提高并发性能、降低锁争用、减小锁持有时间等方面都取得了显著的成果。这个设计决策使得ConcurrentHashMap成为高并发场景中首选的数据结构之一,为开发人员提供了更好的工具,以便更好地处理多线程环境下的数据访问和修改。通过本文的了解,读者可以更深入地理解Java 8中ConcurrentHashMap的内部实现和其在多线程应用中的性能优势。
我的其他博客
【软件工程】走进敏捷开发:灵活、协作、迭代的软件工艺之旅-CSDN博客
【软件工程】融通未来的工艺:深度解析统一过程在软件开发中的角色-CSDN博客
【软件工程】走进瀑布模型:传统软件开发的经典之路-CSDN博客
【软件工程】走近演化过程模型:软件开发的不断进化之路-CSDN博客
【软件工程】漫谈增量过程模型:软件开发的逐步之道-CSDN博客
【Spring】理解IoC与AOP:构建灵活而模块化的软件架构-CSDN博客
【MySQL】数据库并发控制:悲观锁与乐观锁的深入解析-CSDN博客
【MySQL】数据库规范化的三大法则 — 一探范式设计原则-CSDN博客
【MySQL】数据库中为什么使用B+树不用B树-CSDN博客
【MySQL】SQL优化-CSDN博客
【MySQL】脏读、不可重复读、幻读介绍及代码解释-CSDN博客
【MySQL】多表连接查询-CSDN博客
【MySQL】数据库索引(简单明了)-CSDN博客
【Web开发】深度剖析RBAC:概念、实现方法、优势及在Web应用中的应用-CSDN博客
【Mybatis】深入学习MyBatis:高级特性与Spring整合-CSDN博客
【Mybatis】深入学习MyBatis:CRUD操作与动态SQL实战指南-CSDN博客
【MySQL】数据库索引(简单明了)-CSDN博客
相关文章:
【JAVA】Java8开始ConcurrentHashMap,为什么舍弃分段锁
🍎个人博客:个人主页 🏆个人专栏: JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 分段锁的好处: 结语 我的其他博客 前言 在Java 8中,ConcurrentHashMap的实现经历了重大的改进&am…...
基于JAVA+SpringBoot的咖啡商城
✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 随着互联网的普及和发…...
[AutoSar]基础部分 RTE 08 runnable mapping
目录 关键词平台说明一、runnable mapping的必要性二、runnable mapping 通用规则三、Task type四、可以不用mapping的runnbale 关键词 嵌入式、C语言、autosar、runnable 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (…...
云消息队列 Kafka 版生态谈第一期:无代码转储能力介绍
作者:娜米 云消息队列 Kafka 版为什么需要做无代码转储 云消息队列 Kafka 版本身是一个分布式流处理平台,具有高吞吐量、低延迟和可扩展性等特性。它被广泛应用于实时数据处理和流式数据传输的场景。然而,为了将云消息队列 Kafka 版与其他数…...
java: 从HBase中读取数据
一、添加依赖: <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.6.0</version></dependency><dependency><groupId>org.apache.hbase</groupI…...
Lumeical Script------Script Prompt 中的两种输出方式
Lumeical Script------Script Prompt 中的两种输出方式 引言正文方法1方法2 引言 有时候,和众多编程语言一样,我们需要在 Script Prompt 中打印一些我们已经得到的数据,这样可以方便我们调试代码和查看代码中是否有错误。关于在 Script Prom…...
什么是OOM error
OOM error是"Out of Memory"(内存不足)错误的简称。它通常发生在计算机程序执行过程中,当程序需要更多内存空间来执行操作,但系统没有足够的可用内存时,就会触发OOM错误。 当程序尝试使用超过其可用内存的量…...
IO进程线程 day7
使用消息队列完成两个进程之间相互通信 #include<my_head.h> struct msgbuf {long mtype;char mtext[128]; }; #define SIZE (sizeof(struct msgbuf) - sizeof(long))//分支线程从消息队列中读取类型2的消息 void *task(void *arg) {int msgid *((int *)arg);struct msg…...
扩展学习|数据融合助推商务智能与分析
文献来源:[1]李爱华,续维佳,石勇.基于数据融合的商务智能与分析架构研究[J].计算机科学,2022,49(12):185-194. 一、信息融合 (一)信息融合定义演变 早期信息融合的定义指出,其主要任务是综合分析若干传感器观测到的信息[9,…...
Java项目:112SSM在线电影订票系统
博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 在线电影订票系统基于SpringSpringMVCMybatis开发,系统分为前台和后台,前台主要用来用户浏览电影信息,订票,…...
Echarts——使用graphic组件在一个option内同时设置两个饼图的背景图
使用echarts的graphic原生图形元素组件,为两个饼图设置对应背景。 <template><div id"app"><div class"charts" ref"charts"></div></div> </template><script> import * as echarts from…...
编程笔记 html5cssjs 027 HTML输入属性(1/2)
[TOC](编程笔记 html5&css&js 027 HTML输入属性(1/2)) <input>元素除了type属性表示输入类型,后面还跟上其他属性,叫输入属性。 value 属性 value 属性规定输入字段的初始值: <form action"">First name:<…...
请求参数乱码问题
POST请求方式解决乱码问题 在web.xml里面设置编码过滤器 <filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><!-- 设置过滤器中的属性值 -…...
【leetcode】力扣热门之反转链表【简单难度】
题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 用例 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 输入:head [1,2] 输出:[2,1] 输入:head [] 输出:[…...
【sgPasswordInput】自定义组件:带前端校验密码强度的密码输入框,能够提供密码强度颜色提示和文字提示
特性: 有密码强度颜色提示密码强度进度条提示支持设置默认输入提示和密码长度 sgPasswordInput源码 <template><div :class"$options.name" style"width: 100%"><el-inputstyle"width: 100%"ref"psw"type&…...
1599 - Ideal Path (UVA)
题目链接如下: https://onlinejudge.org/index.php?optioncom_onlinejudge&Itemid8&category448&pageshow_problem&problem4474 这道题也是看了刘汝佳的思路才写出来的.... 代码如下: #include <cstdio> #include <deque&…...
计算机网络(超级详细笔记)
使用教材计算机网络(第8版)(谢希仁) 第一章:概述 第二章:物理层 第三章:数据链路层 第四章:网络层 第五章:运输层 第六章:应用层 目…...
老杨说运维 | 年末大讲回顾:运维的尽头也是大模型吗?
哈喽~朋友们,这么快又见面啦。前阵子我们给CEO老杨安排了一场年末大讲,主要是跟大家聊聊智能运维的“智”与“能”以及剖析时下热点----运维大模型。后台收到了不少朋友的反馈,小编看了大受鼓舞并暗下决心----新的一年,希望能多安…...
Unity 利用UGUI之Scrollbar制作进度条
在Unity中除了用Slider、Image做进度条,其实用Scrollbar也可以做进度条。 首先,在场景中新建一个Scrollbar组件和一个Text组件: 其次,创建模拟进度的一个脚本,Scrollbar_Progressbar.cs: using System.Collections; …...
MySQL之导入、导出
文章目录 1.navicat导入导出2.mysqldump命令导入导出2.1导出2.2导入 3.load data infile命令导入导出4.远程备份5.思维导图 1.navicat导入导出 使用Navicat工具导入t_log 共耗时 55s 2.mysqldump命令导入导出 2.1导出 导出表数据和表结构 语法: mysqldump -u用…...
如何让鼠标和触控板和平共处:Scroll Reverser实现设备独立控制的效率革命
如何让鼠标和触控板和平共处:Scroll Reverser实现设备独立控制的效率革命 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 在多设备协同办公成为常态的今天࿰…...
快速找回Chrome密码:ChromePass终极使用指南
快速找回Chrome密码:ChromePass终极使用指南 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass 你是否曾经因为忘记Chrome浏览器中保存的重要登录密码而感到困扰&#…...
前端拖拽交互实现:别再只会用原生拖拽了
前端拖拽交互实现:别再只会用原生拖拽了 毒舌时刻这代码写得跟网红滤镜似的——仅供参考。各位前端同行,咱们今天聊聊前端拖拽交互。别告诉我你还在用原生的HTML5拖拽API,那感觉就像在用诺基亚手机——能打电话,但体验太差。 为什…...
深度解析Internet Archive下载器:数字图书馆资源获取的完整方案
深度解析Internet Archive下载器:数字图书馆资源获取的完整方案 【免费下载链接】internet_archive_downloader A chrome/firefox extension that download books from Internet Archive(archive.org) and HathiTrust Digital Library (hathitrust.org) 项目地址:…...
老牌CMS的隐痛:从DedeCMS漏洞看开源系统会员模块的安全设计误区
DedeCMS会员模块漏洞剖析:开源系统安全设计的深层反思 当一款拥有百万级安装量的老牌CMS系统曝出前台任意密码修改漏洞时,我们看到的不仅是一个具体的技术缺陷,更是开源项目在安全架构设计上的系统性隐忧。2018年那场影响广泛的DedeCMS漏洞事…...
OpCore-Simplify:终极OpenCore EFI配置自动化解决方案
OpCore-Simplify:终极OpenCore EFI配置自动化解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 还在为复杂的黑苹果配置而烦恼吗&am…...
抖音批量下载终极指南:免费无水印视频一键获取
抖音批量下载终极指南:免费无水印视频一键获取 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是否曾为保存喜欢的抖音视频而烦恼?面对心仪的内容创作者,想要收藏他们的…...
【PAT甲级真题】- Is It a Binary Search Tree (25)
题目来源 Is It a Binary Search Tree (25) 题目描述点击链接自行查看 注意点: 这里的二叉搜索树大于等于插到右边 思路简介 一道二叉树模板题(6202年了应该不会还有人不会写二叉树吧bushi ) 一开始想到前序遍历不可能确定一棵树还以为题目…...
【仿真】Carla跨平台部署指南:从零到一,附ROS2与Autoware.auto连接实战
1. Carla仿真平台概述 Carla是一款开源的自动驾驶仿真平台,基于虚幻引擎构建,能够提供高度逼真的城市环境和交通场景。我第一次接触Carla是在2018年,当时它还处于早期开发阶段,但已经展现出惊人的潜力。经过多年发展,现…...
二进制入门及其运算
二进制,十进制以及它们之间的转换- 十进制:我们日常生活中最常用的计数系统是\它的基数是10,使用0 - 9这十个数字来表示数。每个数位的权重是10的幂次方,从右往左依次是10⁰、10、10等。例如,数字234可以表示为210 310 410⁰。- 二进制:是计算机科学中广泛使用的计数系统。它的…...
