为什么会有ConcurrentModificationException

简介: 为什么会有ConcurrentModificationException

为什么会有ConcurrentModificationException异常?

谁因为当方法检测到对象的并发修改,但不允许这种修改的时候,抛出的此异常

在这里介绍一下快速失败机制


快速失败(Fail-Fast)机制:对于线程不安全的集合对象的迭代器,如果在使用迭代器的过程中有其他线程修改了集合对象结构或者元素数量,那么将抛出ConcurrentModificationException,这就是所谓fail-fast策略。


在对集合使用iterator进行遍历的同时,如果直接调用集合对象的相关方法对其进行修改,如删除等操作时,会报ConcurrentModificationException异常。原因是通过集合对象调用其remove(xxx)等方法进行修改时,会导致modCount和expectedModCount的值不一致。然后在循环执行hashNext()方法时,就会检测到这种不一致然后抛异常。


解决方法

API文档上也有说的! 在迭代时只可以用迭代器进行删除!


单线程情况:


(1)使用Iterator提供的remove方法,用于删除当前元素。


(2)建立一个集合,记录需要删除的元素,之后统一删除。


(3)不使用Iterator进行遍历,需要之一的是自己保证索引正常。


(4)使用并发集合类来避免ConcurrentModificationException,比如使用CopyOnArrayList,而不是ArrayList。


目录
相关文章
|
网络协议 Windows
【报错】在浏览器输入localhost无法显示想要的内容
【报错】在浏览器输入localhost无法显示想要的内容
438 0
|
监控 项目管理
深度解析PMP和矩阵型组织
在当今竞争激烈的商业环境中,项目管理已经成为组织取得成功的关键因素之一。为了适应不断变化的市场和技术趋势,许多公司已经采用了矩阵型组织结构,并将PMP(项目管理专业人士)的方法和工具融入到他们的运营中。本文将详细探讨PMP和矩阵型组织之间的关系,以及它们如何共同塑造了现代项目管理的未来
|
canal 消息中间件 存储
DDD领域驱动设计实战(六)-理解领域事件(Domain Event)(中)
DDD领域驱动设计实战(六)-理解领域事件(Domain Event)(中)
1072 0
|
安全 应用服务中间件 网络安全
Tomcat如何配置PFX证书?
【10月更文挑战第2天】Tomcat如何配置PFX证书?
713 7
|
存储 算法 应用服务中间件
Tomcat如何配置JKS证书?
【10月更文挑战第2天】Tomcat如何配置JKS证书?
1069 4
|
网络协议 应用服务中间件 nginx
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
这篇文章讨论了在使用nginx-rtmp-module进行RTMP推流时遇到的“Server error: Already publishing”错误,分析了错误原因,并提供了详细的解决办法,包括修改nginx配置文件和终止异常的TCP连接。
608 0
FFmpeg错误笔记(一):nginx-rtmp-module推流出现 Server error: Already publishing
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
算法
干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题
干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题
1155 0
干货 | 10分钟教你用branch and bound(分支定界)算法求解TSP旅行商问题
|
算法
算法系列--两个数组的dp问题(2)(上)
算法系列--两个数组的dp问题(2)
71 0
|
存储 应用服务中间件 nginx
【各种问题处理】nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)
【1月更文挑战第13天】【各种问题处理】nginx报错nginx: [error] open() “/run/nginx.pid” failed (2: No such file or directory)