HashMap ConcurrentModificationException

news/2024/11/30 10:40:34/

HashMap ConcurrentModificationException

前言

  有一个应用场景,需要多线程访问同一HashMap,其中线程一只作遍历查询,线程二进行添加、修改或删除,在实际使用过程中遇到了ConcurrentModificationException的并发修改异常。

分析

  经查询资料,发现根本原因为:当modCount 变量值不等于expectedModCount变量值时,就会触发此异常,简单理解,modCount 就是集合结构的修改次数**【实际修改次数】,指的是新增、删除(不包括修改)操作。expectedModCount是ArrayList中内部类Itr的一个成员变量,当我们调用iteroter()获取迭代器方法时,会创建内部类Itr的对象,并给其成员变量expectedModCount赋值为ArrayList对象成员变量的值modCount【预期修改次数】**,注意该值是创建时进行赋值的,若在遍历过程中发生了导致modCount增加的调用情况,那么就会抛出异常,这篇文章里有对ConcurrentModificationException更详细的说明。
  既然知道了问题的原因,那就要针对同步问题进行解决,其实就和多线程间的内存保护一样,不能同时进行读写,最好添加互斥。我尝试了synchronized、读写锁以及使用迭代器的remove方法等,都没解决我的问题,后来将HashMap改为ConcurrentHashMap,问题解决了,ConcurrentHashMap使用方法与HashMap一致,感兴趣的伙伴可以自行查找下资料。


http://www.ppmy.cn/news/240377.html

相关文章

vim常见使用方法记录

一、文件查找 1.从开头处搜索 将vim调整为命令模式 假如查找字符串为“model”,在vim中键入命令:“/model” 按下回车,看到vim从头开始所要查找的字符"model"都被高亮显示 键入小写"n"查看下一个匹配的字符串 键入大写…

数据共享传输:台式机和笔记本同步文件!

为什么要在台式机和笔记本同步文件? “我想在台式机和笔记本同步文件。因为我工作时使用笔记本,在家里使用安装了Windows 10系统的台式机,我想要在笔记本和台式机之间同步应用程序、游戏、文档等。有没有一种可以在台式机和笔记本同步文件的…

ChatGPT中文版提示词学习手册, 学完工作效率提升百倍!

既然你对ChatGPT及其功能有了⼀些了解,让我们更深入地了解⼀下ChatGPT是什么以及它是如何工作的。 那么ChatGPT是如何工作的呢?在高层次上,这个过程可以分解为以下步骤: 1. 用户将文本输入ChatGPT界面。这可能是一个问题&#xf…

分享一款程序员起名神器,让你从此起名不再头秃

大家好,我是大目。最近偶然发现一款程序员起名神器,非常好用,推荐给大家。 素材发到视频号了,新号成立,欢迎点赞、收藏、关注、讨论。

华字后面配什么字比较好_华字起名配什么字好

华字读音是hu,起名笔画数是14划,五行属水。华字起名配什么字好?华字比较适合做女孩名字。华字为女孩起名,可取名华源,桦华,柏华,逢华,华章。 华字,象征光辉、生华&#x…

在线付费起名源码/宝宝起名/八字起名/周易取名/周易八字起名平台网站源码

宝宝起名/八字起名/周易取名/周易八字起名平台网站/在线付费起名源码,thinkphp框架开发周易八字起名网宝宝起名在线下单网站源码自适应可二开,PHP权威起名策划机构平台源码,Thinkphp3.2给宝宝起名在线算命网站站码之家源码,宝宝取…

【随便起的名字】

闲话 这个标题我不知道怎么写好,所以暂时不写题目,很像那种写作文先写内容后写题目的人。暂且认为我就是这种人吧。 面试 面试情况 首先说一下实习的感受,不是很严格的计算,实习了也近两个月了。出去实习是我2019年最后一个愿…

起名源码PHP(宝宝取名源码)

起名源码有助于更好的借助八字风水来帮助起名的需求,其参考了一部中国古代经典文本易经。以这种方式咨询的过程包括通过随机生成的方法确定卦,然后阅读与该卦相关的文本。      演示:m.appwin.top      部分源码:texts.py…