for循环出现ConcurrentModificationException异常解决方法

错误解决2 - for循环的遍历过程中增加删除修改引发的ConcurrentModificationException 如标题所言,这个问题的出现,是由于在for循环的遍历过程中调用了remove(object ins)所引发的问题。 而这篇错误记录围绕错误的出现以及解决方案进行 1 错误代码 1.1 增强for循环的方式 1.1.1 kt代码: fun testException(){ var list:ArrayList<String> = arrayListOf("hello","world","java") for(str in list){ if(str == "world"){ li. 阅读详情

目录

报错图片

一、为什么会出现

二、解决过程

三、解决方法


报错图片

 

一、为什么会出现

可以看这篇博客,我就一一赘述了

为什么会出现

二、解决过程

一开始出现,看到别人都是因为迭代器一边遍历一边删除的问题 ,没有说for循环中出现

既然是多线程并发导致,我想着就加个synchronized锁不就完事了嘛,结果还是同样报错 

代码如下:

for (Object datum : resultData) {
                    synchronized (DengGanServiceImpl.class){
                        JSONObject o = (JSONObject) datum;
                        String device_code = o.getString("deviceSerial");
                        String onlineStatus = getStatusByDevice(device_code);
                        if (StringUtils.isNotEmpty(onlineStatus) && !"3".equals(onlineStatus)) {
                            o.put("online_status", onlineStatus);
                            resultData.add(o);
                        }
                    }
                }

于是就想到是否是锁加错了位置,就把锁移到了for循环的外面,还把锁里面的类换成this

synchronized (this) {
                    for (Object datum : resultData) {
                        JSONObject o = (JSONObject) datum;
                        String device_code = o.getString("deviceSerial");
                        String onlineStatus = getStatusByDevice(device_code);
                        if (StringUtils.isNotEmpty(onlineStatus) && !"3".equals(onlineStatus)) {
                            o.put("online_status", onlineStatus);
                            resultData.add(o);
                        }
                    }
                }

这就纯属是不懂原理,在这瞎试了

三、解决方法

就琢磨着既然是多并发问题,就说明是上一个遍历还没有做完动作,下一个遍历又开始了,造成这个原因,那就使用i--一个一个遍历,避免问题的发生

for (int i = resultData.size() - 1; i >= 0; i--) {
                    JSONObject o = (JSONObject) resultData.get(i);
                    String device_code = o.getString("deviceSerial");
                    String onlineStatus = getStatusByDevice(device_code);
                    if (StringUtils.isNotEmpty(onlineStatus) && !"3".equals(onlineStatus)) {
                        o.put("online_status", onlineStatus);
                        resultData.add(o);
                    }
                }

ok,问题解决了,就是速度有点慢,因为需要一个一个排队,先这样吧

宝骏kiwi 630 730 560 E100 E200 E300 310 510 610 330 530维修手册电路图资料线路图接线图更新 2020-2022年宝骏RS-3维修手册和电路图。2020-2022年宝骏RS-3维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2021年宝骏RC-6维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RS-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2020年宝骏RM-5维修手册和电路图。2019-2021年宝骏510维修手册和电路图。2019-2021年宝骏510维修手册和电路图。 阅读详情

相关推荐

FreeRTOS:卡在configASSERT( ( pxQueue ) )问题的解决

FreeRTOS卡在configASSERT( ( pxQueue ) )问题的解决

qq_42007164的博客 9564

java.util.ConcurrentModificationException: null异常由for增强循环嵌套增删引起。

在Java中对集合使用增强for循环时,一旦对集合进行增删操作,在遍历时会引起异常。

DayDayUp 776

告别龟速计算!用Python的fengwo模块5分钟搞定通达信COST/WINNER函数(附完整代码)

本文介绍如何使用Python的fengwo模块高效复现通达信的COST和WINNER函数,解决量化交易中的计算精度和性能问题。通过C++核心算法和多线程优化,计算速度提升显著,误差低于0.5%,并支持与通达信DLL无缝集成,适用于实盘交易策略开发。

weixin_42533751的博客 600

for循环遍历list,报ConcurrentModificationException的错

在for循环遍历list的时候,不要对集合进行增删的操作。不然会报java.util.ConcurrentModificationException的错。 原因是因为,迭代方法里面有以下这个方法,这个方法的作用是保证在迭代期间,集合的结构不发生改变。 解决方法:可以用removeAll()来解决。 public static void main(String[] args) { ...

Q酱的专栏 943

中山大学_数据科学与计算机_预推免

前言 2019 年 9 月中旬是中山大学预推免时间,本人没能进到夏令营,但是最后在预推免上岸也算不幸中的万幸。 记忆不一定准确,但希望能帮到他人。 想看 流程 的可以直接看总结,正文部分有本人心路历程。 预推免 中山大学的预推免大致可以分为 报道,机试,面试 三大部分,而且尤其是面试,所有人加起来总时长 3 天,幸运的是,本人被安排在第一天的下午第一场,上午就是机试,报道,机试,面试,无缝衔接。 ...

一把健 5208

【EPICS学习记录】根据官方教程创建一个IOC应用

参照官网给出的IOC创建教程逐步操作完成了一个IOC应用的创建,官网教程中有部分过程表述的不清晰,自己摸索之后完成了IOC的创建,并把流程记录下来。其中有一些操作不是很理解,有问题或者建议欢迎指正。

yifeng_H的博客 3661

list for 循环报错 ConcurrentModificationException

list for循环报错 ConcurrentModificationException 1、案例一 背景: 下面代码执行报错 ConcurrentModificationException for (String s : list) { list.remove(s); } 分析: (1)foreach方式遍历元素的时候,生成iterator,然后使用iterator遍历。 在生成iterator的时候,会设置expectedModCount参数,初始值为list的个数,此时modCou...

J_bean的博客 1451

Figma做原型设计一篇教会你,全栈软件开发必备技能,前后端岗位锐减找工作的底牌

本文介绍了使用Figma进行前端应用原型设计的方法与优势。Figma作为主流设计工具,能够满足大多数应用系统的原型设计需求,强调系统设计应保持简洁合理。文章详细说明了Figma的基本操作流程,包括创建Frame页面、组件使用、交互设置等核心功能,并指出命名规范的重要性。同时对比了Axure、墨刀等其他设计工具的特点,建议根据具体需求选择合适的平台。最后强调原型设计主要关注交互功能展示,业务逻辑应通过需求文档表述。整体而言,Figma凭借其简洁高效的特点,已成为原型设计的优选工具。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 459

java for循环出现异常_for循环报JAVA语言 ConcurrentModificationException异常原因和解决方法...

本文主要向大家介绍了for循环报JAVA语言 ConcurrentModificationException异常原因和解决方法,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。newThread(newRunnable() {@Overridepublicvoidrun() {for(inti = 0; i < myList.size(); i++) {String value...

weixin_29629231的博客 856

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 881

Qt c++ llama.cpp 运行 LLaMA-3-8B 中文对话机器人(多模态输入)

助手:

寒寒豆豆软件公司的博客 219

for循环 报Java ConcurrentModificationException异常原因和解决方法

newThread(newRunnable() {        @Override     publicvoidrun() {                  for(inti = 0; i &lt; myList.size(); i++) {               String value = myList.get(i);                            Syst...

SmallWalnutBG的博客 1660

想重装OpenClaw?先执行这4步彻底卸载,避免配置冲突

在重装OpenClaw之前,彻底卸载是非常重要的一步。如果不彻底卸载,可能会导致: - 残留的配置文件与新安装的版本冲突 - 旧的依赖包干扰新的安装过程 - 服务冲突导致启动失败 - 数据混乱影响系统稳定性

一键难忘的博客 1043

Java中ConcurrentModificationException异常

遇到的问题 在我们用迭代器遍历List, Set类型的集合过程中,若我们用List, Set类的add, remove方法修改其中的元素,可以通过编译,但在运行时会抛出ConcurrentModificationException异常。 同样地,在增强for循环(for each)中调用List, Set类的add, remove方法也会遇到同样的问题。这是因为增强for循环实际上也是通过迭代器实...

ZhifanSk的博客 358

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SAP B1中文培訓教材_SDK

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

java.util.ConcurrentModificationException异常出现的原因及解决方法

增强for循环 遍历列表时会调用 checkForComodification() 方法检查当前列表是否有并发修改,如果有则会抛出 java.util.ConcurrentModificationException 异常。

晴空๓ 2995

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java.util.ConcurrentModificationException 已解决

🌆。

扎哇太枣糕的笔记博客 954

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

一文搞懂java.util.ConcurrentModificationException异常原因和解决方法

文章目录场景复现原因分析解决方法ListMap 场景复现 对于list,map都有可能出现,这里主要分析list! @Test public void testList() { List<String> list = new ArrayList(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add

Apple_Boy的博客 1万+

ConcurrentModificationException:检测到并发修改完美解决方法

大家好,我是默语!在这篇文章中,我们将深入探讨Java中的,它是一种常见的运行时异常,通常在对集合进行遍历时发生并发修改的情况。对于刚接触Java的初学者来说,了解这个异常的原因、常见场景以及解决方法非常重要。本文将提供详细的说明和示例,帮助你有效地避免和处理这类错误,提升你的编程技能!🌟是Java中的一种运行时异常,位于java.util包中。当你在遍历集合(如List、Set、Map)时,如果在遍历的同时对集合进行修改(例如,添加或删除元素),就会抛出这个异常。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

强制for循环弊端

今天在解决下载问题时,遇到了各种Exception 首先遇到的就是ConcurrentModificationException异常,这个异常解决起来也好解决,异常产生原因是应为,使用了强制for循环for(Post post:postList)在for循环中对集合中的元素作了修改引起的。解决方法也很简单,只要打印异常就能看到是哪行出的错,然后List postlist = postList;改成

等待岁月 2040

Java 一种 java.util.ConcurrentModificationException 异常原因

本文介绍了一种关于 迭代器的java.ConcurrentModificationException的异常抛出原因。

qq_50150638的博客 568

java.util.ConcurrentModificationException异常原因及解决方法

通过迭代器循环通知消息,foreach直接循环会报java.util.ConcurrentModificationException异常。

行者-崛起之路 2980

解决java.util.ConcurrentModificationException:null

解决java.util.ConcurrentModificationException:null

qq_45636295的博客 794

Java list.remove( )方法 ConcurrentModificationException异常

ConcurrentModificationException异常   在遍历一个集合时,当集合结构被修改,会抛出Concurrent Modification Exception。这是一种fail-fast(快速失败)机制。   在遍历List的过程中进行list.remove() ,相当于把list整个修改了 for循环遍历 for(int i=0;i&lt;list.size(...

h_bpdwn的博客 1933

JAVA ConcurrentModificationException

import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; /* * 问题? * 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现。 * * ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异.

DonnyCoy 168

关于ConcurrentModificationException异常

在使用增强 for 循环遍历ArrayList,同时删除某元素时,遇到ConcurrentModificationException异常 for(Person p : personList) { if(id.equals(p.getId)) { personList.remove(p); } } 因为使用增强for循环的时候,内部原理是调...

weixin_30346033的博客 99

ConcurrentModificationException(并发修改异常)的解决

【异常解释】  ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。【产生的原因】  迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。  简单描述就是:迭代器遍历元素的时候,是不能通过集合的方法修改元素的。【如何解决】  A:迭代器遍历元素,用迭代器的方法修...

weixin_30267785的博客 105
上一篇: Java中 Json、String、jsonObject、jsonArray格式之间互相转换
下一篇: java前端和后端的时间相差八个小时
itBoy_逗号
博客等级 码龄8年 46粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值