[无异常,才正常]关于ConcurrentModificationException异常

Java | 解决并发修改异常问题【CurrentModificationException】 面对突如其来的【CurrentModificationException】,研究并发修改异常所带来的问题🔍 阅读详情

<span style="background-color: rgb(255, 255, 255);"><span style="font-family:KaiTi_GB2312;font-size:18px;">今天在温习算法分析的时候,对一个ArrayList进行遍历删除偶数元素的时候,抛出了一个java.util.ConcurrentModificationException异常</span></span>

for (Integer x : list) { //拋出ConcurrentModificationException异常

<span style="font-family:KaiTi_GB2312;font-size:18px;">if (x%2==0) {
list.remove(x);
}
}</span>

查阅网上资料时,发现以下说明

This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible.(concurrent是同时发生,大概意思是当一个object被同时修改的时候,而且该修改是不允许的,就会报这个异常)

For example, it is not generally permissible for one thread to modify a Collection while another thread is iterating over it(一个线程在修改容器,而另外一个线程在遍历这个容器,这样是不允许的). In general, the results of the iteration are undefined under these circumstances. (这样做的会发生不确定的结果)Some Iterator implementations (including those of all the general purpose collection implementations provided by the JRE) may choose to throw this exception if this behavior is detected. (有一些容器的迭代器检测到这样的行为,就会抛出这个异常)Iterators that do this are known as fail-fast iterators, as they fail quickly and cleanly, rather that risking arbitrary, non-deterministic behavior at an undetermined time in the future.(这种称作fail-fast迭代器,它们失效的很快而且很干净利落而不是愿意冒发生不确定行为的危险, 大概就是说, 遇到这种情况迭代器自己直接就把自己给失效了)

Note that this exception does not always indicate that an object has been concurrently modified by a different thread. (这种异常不总是在一个object被不同线程同时修改时抛出, 即不是总是抛出这个异常)If a single thread issues a sequence of method invocations that violates the contract of an object, the object may throw this exception. For example, if a thread modifies a collection directly while it is iterating over the collection with a fail-fast iterator, the iterator will throw this exception.(当一个线程对一个容器操作的时候, 例如用fail-fast迭代器边遍历边修改这个容器,就是抛出这个异常)


解决办法是修改代码为如下方式:

Iterator<Integer> iterator=list.iterator();
		while (iterator.hasNext()) {
			if (iterator.next()%2==0) {
				iterator.remove();
			}
		}



并发修改异常ConcurrentModificationException详解 目录 一、简介 二、异常原因分析 三、异常原因追踪 五、如何避免并发修改异常? 六、总结 一、简介 在多线程编程中,相信很多小伙伴都遇到过并发修改异常ConcurrentModificationException,本篇文章我们就来讲解并发修改异常的现象以及分析一下它是如何产生的。 异常产生原因:并发修改异常指的是在并发环境下,当方法检测到对象的并发修改,但不允许这种修改时,抛出该异常。 下面看一个示例: public class TestConcurrentModifyException 阅读详情

相关推荐

colmap+openMVS稠密重建

简要记录一下colmap+openMVS稠密重建相关使用。

weixin_41631106的博客 2241

关于collection的iterator出现的问题

1.循环用iterator去遍历,内部的删除或者增加操作用集合本身的增删操作,会出现currentmodificationException异常。集合和iterator都维护了一个计数器,当使用集合本身来增删它不会更改iterator的计数器,在用next时,checkForComodification就会发现两个计数器不一致。报错   (这种情况应该统一遍历方式,比如使用iterator去遍历,...

耐得住寂寞,才能受得住繁华 479

[多智能体强化学习] 王树森YouTube课程笔记

前言 近期在设计V2X资源分配任务下的状态空间和动作空间,可以说是一筹莫展,是自己菜,现在看来可能也是涉及到一些关于多智能体强化学习实现过程中过于细节的点,目前的知识储备还不够。因此打算用半周到一周的时间重电,希望之后能有进展。 本文内容来自于友人LX所推荐的油管教程,链接如下:多智能体强化学习,一共两节课40min左右。教程废话不多干货不少,老师的声音还好听,推荐直接去看原教程。 这里还要多一嘴,那就是对于强化学习来说,单主体和多主体的界限,在某种程度上来说是很模糊的,并不是场景中有多个主体需要..

观林望实的博客 3362

ConcurrentModificationException异常解决办法

1、 在开发自己的第一款app,在操作存放子弹的ArrayList时,报出java.util.ConcurrentModificationException异常,因为该异常是非捕获型异常而且很少见,所以费了些时间才找到问题所在.查询了很多资料,终于调通了. 原代码是这样的, synchronized(mCowBoys){ for(CowBoySprite cowBoy: mCowBoys)

一个本科小生的奋斗史 9622

别再到处找模型了!手把手教你用Xinference+Docker部署本地私有大模型(Llama2/Qwen实战)

本文详细介绍了如何使用Xinference和Docker部署本地私有化大模型(如Llama2/Qwen),涵盖硬件配置、模型管理、Docker部署及性能优化等关键步骤。通过实战案例,帮助开发者快速构建企业级AI推理服务,确保数据安全与高效运行。

weixin_28683065的博客 231

实用软件工程(第2版)吕云翔编简答题部分答案(自用整理)

整理自用

m0_61217768的博客 4107

ConcurrentModificationException异常解析和解决方法

首先,我也是在网上搜到的一篇博客了解到的ConcurrentModificationException的出现原因和解决办法,源地址连接https://www.cnblogs.com/dolphin0520/p/3933551.html,且文中的不少代码也是复制他的,但是一些总结都是自己的 # ConcurrentModificationException ## 一、介绍 ​ 在前面一篇文章...

woshicaijie的博客 900

SAP Workflow 工作流开发步骤总结

SAP WORKFLOW

qq_36952606的博客 5089

Java ConcurrentModificationException异常原因和解决方法

https://www.2cto.com/kf/201403/286536.html

码超的博客 251

Claude Code 源码一夜流出:会看热闹的人很多,会读源码的人很少

摘要:Claude Code源码意外泄露后,作者分享了高效的源码学习方法:1)Fork仓库保存代码;2)使用Qoder的Repo Wiki功能生成结构化文档和UML图;3)基于Wiki创建可复用的Skill。这种方法比直接让AI总结代码更系统深入,并推荐了可视化学习项目辅助理解。文章强调实践的重要性,提供了具体工具和操作指南。

719

Unity之OpenXR+XR Interaction Toolkit实现 Gaze眼部追踪

在虚拟现实(VR)和增强现实(AR)应用中,眼动追踪是一项强大而受欢迎的技术。它可以让开发者更好地理解用户的注意力和行为,并创造出更加沉浸和智能的体验。在本文中,我们将探讨如何使用 Unity OpenXR 实现Gaze眼部追踪功能。

TxNet 1751

迭代集合时删除元素的正确姿势:避开ConcurrentModificationException的陷阱

Fail-Fast(快速失败)是Java集合框架的一种设计思想。一旦检测到“非预期”的并发修改,立即抛出异常终止程序,防止潜在的数据不一致问题。

m0_73941339的博客 1166

游戏引擎定制化:大厂如何玩转性能极限(大白话生动有趣版)

游戏大厂如何深度定制游戏引擎?本文系统解析了商业引擎的局限性及大厂定制化的核心诉求。主要内容包括: 大厂定制引擎的根本原因:性能瓶颈、差异化需求、自有生态整合等 主流引擎的优劣势对比及适用场景 定制化重点领域:渲染管线优化、物理系统重构、网络架构改造等 全流程定制方案:从需求分析到模块重构再到工具链开发 典型案例:如腾讯CF手游的渲染优化、原神的热更新系统等 文章指出,顶级游戏产品必须对引擎核心模块动刀,通过深度定制实现性能突破和创新功能开发。同时提供了风险规避建议和技术演进趋势,为游戏开发者提供了宝贵的实

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 634

多线程同时读写操作List引发的异常问题

  今天运行刚写的本地程序的时候发现偶发性的出现如下异常。 java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) at java.util.ArrayList$Itr.next(ArrayList.java:851) at ys.manufacture.dip.etl.listener.TaskLogListener$1.run(Ta

精灵鼠小强的博客 2049

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

foreach判断最后一个_ArrayList集合为什么不能使用foreach增加、删除、修改元素

编程过程中常常需要使用到集合,而ArrayList也是我们常常使用的,但是最近在一次删除和增加中出现了一些问题,分享记录下。请看下面两段代码,哪段代码会报错呢,或者都成功呢。List arrayList1 = new ArrayList();arrayList1.add("1");arrayList1.add("2");for (String s : arrayList1) { if("1".eq...

weixin_39726873的博客 125

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java foreach 删除_java foreach循环删除报错

1、使用foreach 进行删除数据时,出现错误:List list = new ArrayList();list.add("1");list.add("2");list.add("3");for(String temp : list) {if ("3".equals(temp)) {list.remove(temp);}}System.out.println(list.toString());出...

weixin_32715349的博客 976

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Java基础系列(面试必备):Java之循环删除List元素的正确方法!

37/100 Mrs_chens Java基础系列(基础):Java使用Cookie增删改查操作! 前言 今天博主将为大家分享:Java基础系列(基础):Java使用Cookie增删改查操作!不喜勿喷,如有异议欢迎讨论! 什么是Cookie? 到这里:Java基础系列(基础):Java使用Cookie增删改查操作!分享完毕了,快去试试吧! 最后 更多参考精彩博文请看这里:《陈永佳的博客...

Mr_chen的博客 504

ConcurrentModificationException异常

一:ConcurrentModificationException异常: 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 二:遍历list集合时删除元素出现的异常 public static void main(String[] args) { ArrayList&lt;String&gt; list=new ArrayList&lt;String&gt;(); ...

小礼貌的博客 9万+

Java ConcurrentModificationException 异常分析与解决方案

一、单线程 1. 异常情况举例     只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例: 使用的数据集合: List myList = new ArrayList(); myList.add

Android 3万+

ConcurrentModificationException异常原因和解决方法

首先看一下一个例子举出 ConcurrentModificationException 的出现场景: public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(){ { add(1); add(2); add(3); } }; Iterator&

qq_44613591的博客 9万+

什么是ConcurrentModificationException?在哪些场景下会报该异常?

ConcurrentModificationException是基于java集合中的 快速失败(fail-fast) 机制产生的,在使用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了增删改,就会抛出该异常。 快速失败机制使得java的集合类不能在多线程下并发修改,也不能在迭代过程中被修改。 抛异常实例 使用迭代器遍历list,同时使用list.remove方法删除元素,会抛ConcurrentModificationException异常: public void tryRemove(Lis

weixin_38802600的博客 2万+

【异常】——ConcurrentModificationException

前言 在对一个list进行循环,将其中一些元素从list中移除时: 在此之前先弄清楚一些相关的知识。 Fail-Fast机制 快速失败也就是fail-fast,它是Java集合的一种错误检测机制。 java.util包中的集合类都有 fail-fast 检测,如果fail-fast迭代器检测到在迭代过程中进行了更改操作,那么它会抛出 ConcurrentModificationEx...

我爱吃土豆 5966

如何避免 ConcurrentModificationException 异常

在实际生产过程中,碰到了一个概念中的异常,ConcurrentModificationException。 这个异常主要出现在集合的遍历中,对集合进行了add或者remove的操作; 以ArrayList为例子,当在forEach的时候,对list本身进行add或者remove的操作,查看ArrayList的源码,相当于是移动了指针;点击查看 以HashMap为例,集合的修改有一个modCount...

张小挑的博客 1919
上一篇: 如何反编译Android的Apk文件获取其代码和资源文件
下一篇: Myeclipse安装 配置Maven
simon-hacker
博客等级 码龄12年 4粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值