ConcurrentHashMap

ConcurrentHashMap弱一致性迭代器Iterator 之前查看ArrayList中迭代器实现源码,明白为啥通常用的迭代器在迭代的过程中不能作add和remove操作。但在支持并发数据结构的情况下,还会存在这种情况吗? 答案是不会,少见多怪了,util包中的迭代器实现是fast-failed迭代器,说白了就是一旦由修改就抛异常,在current包中迭代器是弱一致性迭代器,原来两种迭代器情况不一样。 测试代码用以ConcurrentHashMap为例... 阅读详情

Concurrent是同时的意思

相对于HashTable和Collections.synchronizedMap(),ConcurrentHashMap能够在线程安全的基础上提供更好的并操作。同时降低对读的一致性要求。

jdk6、7、8都不同

1、jdk6/7的的实现

设计思路:采用分段锁的设计,而HashTable是对整个map加锁性能下降。ConcurrentHashMap是对某个部分加锁。

but,由于不是对整个Map加锁,导致一些需要扫描整个Map的方法(如size(), containsValue())需要使用特殊的实现,另外一些方法(如clear())甚至放弃了对一致性的要求(ConcurrentHashMap是弱一致性的

并发度:就是程序同时更新map不产生所得最大线程数,默认是16,一般是2的次方数。不能多不能少,也就是提升了16倍

就是把大Map拆分成N个Segment类似HashTable了

源码分析:

concurrencylevel默认是16个段(Segment)

每个Segment都是独立的,支持并发

get方法不需要加锁,因为是用volatile来保证可读性的

2、jdk8的实现

变动很大,不用锁段了,利用synchronized和CAS算法,底层是数组+链表+红黑树,为了满足并发又增加了很多辅助的类,例如TreeBin,Traverser等对象内部类。

数据结构: synchronized和CAS+Node+红黑树,node的val和next都用volatile来保障可见性,查找替换赋值用 cas

和HashTable区别:不能别取代,两者的迭代器不同,HashTable是强一致性,而ConcurrentHashMap是弱一致性。包括get/clear/iterator都是弱的

什么是弱一致性?

put完成之后不能,get需要等待一段时间。

问题:

(1)ConcurrentHashMap的锁分段技术

(2)ConcurrentHashMap的读是否要加锁,为什么

不需要加锁,put加锁了,get不需要

(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器

ConcurrentHashMap扩容 三种触发方式达到了扩容的阈值。 阅读详情

相关推荐

【java】ConcurrentHashMap遍历 --- 弱一致性的迭代器(Iterator)实现原理

1.概述 转载:ConcurrentHashMap遍历 — 弱一致性的迭代器(Iterator)实现原理 在 Java并发编程实战(进阶篇) 中分析了 Vector 在迭代过程中对容器进行修改会抛出 ConcurrentModificationException 异常,但在并发容器中还会出现这种情况吗? 在并发容器中并不会出现这种情况,这是因为,util包中的迭代器实现是fast-failed迭代器(就是一旦由修改就抛异常),而在current包中迭代器是弱一致性迭代器。 那么我们通过 Concurren.

九师兄 3304

JAVA并发容器:为什么说ConcurrentHashMap是弱一致性的?

ConcurrentHashMap的弱一致性体现在clear、迭代器和get方法,原因在于没有加锁。 举例: 迭代器在遍历数据的时候是一个Segment一个Segment去遍历的,如果在遍历完一个Segment时正好有一个线程在刚遍历完的Segment上插入数据,就会体现出不一致性。 clear也是一样。 get方法在取数据的时候,如果有一个线程正好在put,假设他put的key是存在的,那么ge...

开始写bug~~~ 3959

SAP特殊采购类80实战:跨工厂生产配置避坑指南(附完整测试流程)

本文深入解析SAP特殊采购类80在跨工厂生产场景下的实战应用与配置要点。文章从核心业务逻辑出发,详细拆解了后台配置、主数据与BOM的“双工厂”思维模式,并提供了从创建需求到成品收货的完整测试流程。重点揭示了多层BOM下的需求传递陷阱及常见报错解决方案,旨在帮助SAP顾问及用户规避实施风险,实现资源的灵活调度与流程自动化。

wind6的博客 1138

ConcurrentHashMap为什么是弱一致性的

关于ConcurrentHashMap在之前的ConcurrentHashMap原理分析中已经解释了原理,而HashTable其实大抵上只是对HashMap的线程安全的封装,在JDK7与JDK8中HashMap的实现中解释了HashMap的原理。 至此你应该能够明白,ConcurrentHashMap与HashTable都可以用于多线程的环境,但是当Hashtable的大小增加到一定的时候,性能...

奋斗吧_-小青年 6753

Claude Code 完整学习笔记

Claude Code 学习笔记摘要 Claude Code是Anthropic推出的智能编码工具,基于Claude Opus 4.5模型构建,提供跨平台支持(终端/VS Code/JetBrains/Web等)。核心功能包括: 代码库理解与多文件编辑 命令执行与开发工具集成 智能体协作开发流程 安装要求Node.js≥18,提供原生/Homebrew/npm等多种安装方式,支持环境变量配置API访问。基础交互模式包括会话管理、文件操作和代码审查等功能,可自动读写文件并执行精确修改。 (149字)

虚心若愚 810

东方财富 vs 新浪 vs AKShare:3 种股票实时数据接口性能与稳定性实测对比

本文深度评测了东方财富、新浪和AKShare三种股票实时数据接口的性能与稳定性。通过实际测试数据,从延迟、成功率和数据完整性三个维度进行全面对比,为量化交易和数据分析开发者提供选型参考。结果显示,东方财富接口在实时性和稳定性方面表现最优,适合高频交易场景。

weixin_30800807的博客 385

ConcurrentHashMap弱一致性

[原文链接] 本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识。happens-before相关内容参见:JLS §17.4.5. Happens-before Order、深入理解Java内存模型以及Happens before;ConcurrentHashMap的详细介绍以及底层原理见深入分析...

weixin_30740581的博客 466

从S参数到SPICE模型:Cadence Sigrity Boardband SPICE完整使用指南

本文详细介绍了Cadence Sigrity Boardband SPICE工具的核心价值与完整使用流程。该工具通过矢量拟合算法,将复杂的多端口S参数文件转化为无源、紧凑且高精度的SPICE等效电路模型,从而极大提升时域仿真效率。指南涵盖了从数据导入、关键参数配置、模型精度验证到集成应用于PowerSI等系统级仿真的全步骤,是信号与电源完整性分析的必备利器。

defi6farmer的博客 432

ConcurrentHashMap杂谈

为什么使用ConcurrentHashMap 在并发编程中使用HashMap可能导致程序死循环,而使用线程安全的HashTable效率又非常低下 线程不安全的HashMap 在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100% 死循环案例: final HashMap<String, String> map = new HashMap<String, String>(2); Thread t = new Thread(new Runn

qq_46153765的博客 5776

超详细YOLOv8实例分割全程概述:环境、训练、验证与预测详解

这篇博客提供了一个全面的指南,介绍了如何使用 Ultralytics YOLOv8-seg 系列模型进行对象检测和分割任务。内容从环境搭建、模型选择、训练、验证到预测的完整流程都有详细说明。为想要使用 YOLOv8-seg 系列模型的开发者提供了一站式的解决方案。它不仅涵盖了从环境配置到模型部署的详细步骤,还解释了如何解读和使用模型输出,使得用户能够根据自己的需求选择合适的模型,并能够有效地训练和评估它们。

CDBmax的博客 6万+

从FP16到FP8:我是如何让Stable Diffusion 3.5提速40%而不丢画质的

本文分享了StableDiffusion模型优化的实战经验。通过FP8精度转换、分层处理敏感模块,实现显存占用降低35%、推理速度提升40%。文章详细介绍了提升画质的五大技巧、本地/云端/移动端部署方案,以及二次元模型定制等垂直领域应用。同时总结了硬件兼容性、数据质量等七大常见陷阱,并强调持续监控和伦理考量。作者指出未来应关注MoE架构、注意力机制优化等方向,认为技术优化是持续追求性能与质量平衡的过程。

达则兼济天下 1186

从ConcurrentHashMap看锁优化思路

我想,聊ConcurrentHashMap一定离不开并发,我们都知道他是为了解决HashMap的并发安全问题而生,那你有没有想过,我们在背八股的时候,都说HashTable和HashMap最大的不同便是HashTable是线程安全的,那么为什么要有ConcurrentHashMap?留下这个思考后,我们来想,造成并发安全的原因是什么?是不是不同线程同时对共享内存的访问,即我们需要一种手段来保证并发的安全性。

sbysgysby的博客 2099

从零到一:基于JasperGold的FPV实战入门与避坑指南

本文详细介绍了基于JasperGold的形式化验证(FPV)实战入门指南,涵盖环境搭建、SVA断言编写、TCL脚本调试等关键步骤。通过实际案例解析,帮助IC设计工程师掌握FPV技术,有效验证RTL设计中的复杂逻辑和corner case,提升验证效率与质量。

weixin_30899023的博客 360

HashMap和ConcurrentHashMap

特性HashMap线程安全性非线程安全,必须手动同步线程安全,内建并发控制机制锁机制无锁机制,需要外部同步使用分段锁或其他细粒度锁Null 键和值允许一个null键,多个null值不允许null键或null值迭代器Fail-fast弱一致性迭代器,可以并发修改性能在单线程中较快,线程不安全在高并发环境下性能更好并发操作需要外部同步机制支持高并发操作,线程间并发无锁竞争适用场景单线程,手动同步的多线程高并发的多线程环境适合在多线程环境下使用,而HashMap。

qq_45884192的博客 1263

CyberChef本地搭建

CyberChef本地搭建

2301_80241182的博客 6069

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ConcurrentHashMap是弱一致性分析

本文将用到Java内存模型的happens-before偏序关系(下文将简称为hb)以及ConcurrentHashMap的底层模型相关的知识。happens-before相关内容参见:JLS §17.4.5. Happens-before Order、深入理解Java内存模型以及Happens before;ConcurrentHashMap的详细介绍以及底层原理见深入分析ConcurrentHa

wzq6578702的专栏 7755

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

剖析 ConcurrentHashMap 源码

本文深入剖析了Java并发容器ConcurrentHashMap的核心设计思想与实现机制。首先,通过分析ConcurrentMap接口的原子操作方法及其CAS语义实现,揭示了无锁编程模式的设计理念;其次,详细解读了ConcurrentHashMap的关键实现,包括分段计数、树化/退化机制、特殊节点处理等技术,展示了其如何通过分层锁策略(空桶CAS+非空桶synchronized)实现高并发;重点解析了sizeCtl控制变量和扩容机制,阐明了多线程协作扩容的智能调度算法,包括扩容标记生成、线程计数管理。

lifallen的博客 2086

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

ConcurrentHashMap CAS 详解

ConcurrentHashMap CAS 详解

T_Y_F_的博客 1640

ConcurrentHashMap介绍

红黑树是一种特殊的平衡二叉树,首选具备了平衡二叉树的特点:左子树和右子数的高度差不会超过1,如果超过了,平衡二叉树就会基于左旋和右旋的操作,实现自平衡。每个节点必须是红色或者黑色。根节点必须是黑色。如果当前节点是红色,子节点必须是黑色所有叶子节点都是黑色。从任意节点到每个叶子节点的路径中,黑色节点的数量是相同的。当对红黑树进行增删操作时,可能会破坏平衡或者是特性,这是红黑树就需要基于左旋、右旋、变色来保证平衡和特性。

优快云博客 2047

ConcurrentHashMap的put与get解析

众所周知,常用的HashMap不是线程安全的;在多线程场景下,为保证线程安全与效率,一般使用ConcurrentHashMap。本文对ConcurrentHashMap的put与get方法作了深入解析,作分享给大家

Romantic-HaShiQi的博客 1743

深入理解ConcurrentHashMap

concurrentHashMap是一个支持高并发更新与查询的哈希表(基于HashMap)。hashtable该类不依赖于synchronization去保证线程操作的安全。Collections.synchronizedMap()也可以将map转成线程安全的。而concurrentHashMap在保证安全的前提下,进行get不需要锁定。HashTable: 使用了synchronized关键字对put等操作进行加锁;ConcurrentHashMap JDK1.7: 使用分段锁机制实现;

SevenCoding的博客 1297

ConcurrentHashMap详解

ConcurrentHashMap是Java中的线程安全哈希表实现,在JDK 1.8进行了重大优化。它采用Node数组+红黑树+CAS的混合结构,通过细粒度锁(synchronized桶头节点)和无锁操作(CAS)实现高并发。读操作无锁,写操作仅锁定单个桶,支持并发扩容和多线程协同迁移数据。当链表长度超过阈值(默认8)时会转为红黑树,提升查询效率。相比JDK 1.7的分段锁设计,1.8版本锁粒度更细,性能更高,适合高并发场景下的缓存、计数器等应用。

xinzhiyishi的博客 1261
上一篇: mysql索引B树B+树,联合索引
下一篇: ReentrantLock和synchronized两种锁定机制的对比
攀子zzu
博客等级 码龄14年 5粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值