关于报错java.util.ConcurrentModificationException: null的源码分析和解决

一般有这种问题,方法中至少会有List或者Map下的至少两个子类,有可能参数类型相同,也有可能不同都有可能触发这个问题!其主要原因是使用了ArrayList进行删除操作或者使用iterator遍历集合的同时对集合进行修改都有可能会出现这个问题
ArrayList属于List下的子类

需要区分的是List在java中有两个属于两个不同的包,这里说的是Util包下的List!两个类一个是接口一个是Class类(基础知识了吧算是)

在这里插入图片描述

针对此问题的ArrayList源码解析https://blog.csdn.net/qq_43705131/article/details/122607384

问题截图及源码触发部分代码
在这里插入图片描述
业务问题代码
在这里插入图片描述

不管泛型使用的是同种参数还是不同参数都要注意这个问题

场景复现

业务场景:

需要一个接口返回一个List对象,但是在List中需要调用另一个接口并将该接口的返回结果插入List中(如上图代码注释所写)

这时候类型的兼容性问题就出现了

代码场景:

首先:调用接口返回一个集合,需要集合中的全部数据及拿到集合中的ID
List<Map<String, List>> periodicLQ = periodicObservationMapper.periodicLQ(pointId,dir, lineNo, startDate, endDate);
用于调用另一个接口查询该ID下的全部值并且赋到一个List中用于返回

List structureDetailInfo = structureDetailInfoMapper.selectByPavementStructureInfoIds(ids);
代码实现:(问题复现)

这样写在List structureDetailInfo = structureDetailInfoMapper.selectByPavementStructureInfoIds(ids);

{//查询结构内     基本数据及  联合数据 ,返回统计结果     拿到structure_info 的 ID拿到结构数据将此以数组返回到VOList<Map<String, List<StructureDetailInfoPO>>> periodicLQ = periodicObservationMapper.periodicLQ(pointId,dir, lineNo, startDate, endDate);Map<String, List<StructureDetailInfoPO>> structureInfo = new HashMap<>();//用于存储接口获取到的所有id值List<Long> ids = new ArrayList<>();for (Map<String, List<StructureDetailInfoPO>> item: periodicLQ) {if (!item.isEmpty()){Long id = Long.valueOf(String.valueOf(item.get("id")));ids.add(id);for (int i = 0;i <= item.size();i++){List<StructureDetailInfoPO> structureDetailInfo = structureDetailInfoMapper.selectByPavementStructureInfoIds(ids);structureInfo.put("structureInfo",structureDetailInfo);//System.out.println(" structure detail info size : " + structureDetailInfo);//resultMap.add(structureInfo);}result.add(item);//result.add(structureInfo);//break;}System.out.println(" result size : " + result);}return result;}

解决方案–>避免修改ArrayList或者引用的其他List类和Map中的子类

创建一个名为 resultMap 的临时列表,并在循环中将结构信息添加到该列表中。最后,我们返回 resultMap 列表,而不是修改 result 列表用于返回。这就能够解决 ConcurrentModificationException 异常的问题,因为这样就创建了一个中间变量用来存储结果,避免修改了原来的result列表(List)


{//查询结构内     基本数据及  联合数据 ,返回统计结果     拿到structure_info 的 ID拿到结构数据将此以数组返回到VOList<Map<String, List<StructureDetailInfoPO>>> periodicLQ = periodicObservationMapper.periodicLQ(pointId,dir, lineNo, startDate, endDate);List<Map<String, List<StructureDetailInfoPO>>> resultMap = new ArrayList<>();Map<String, List<StructureDetailInfoPO>> structureInfo = new HashMap<>();//用于存储接口获取到的所有id值List<Long> ids = new ArrayList<>();for (Map<String, List<StructureDetailInfoPO>> item: periodicLQ) {if (!item.isEmpty()){Long id = Long.valueOf(String.valueOf(item.get("id")));ids.add(id);for (int i = 0;i <= item.size();i++){if (i == item.size()){List<StructureDetailInfoPO> structureDetailInfo = structureDetailInfoMapper.selectByPavementStructureInfoIds(ids);structureInfo.put("structureInfo",structureDetailInfo);//System.out.println(" structure detail info size : " + structureDetailInfo);}else {continue;}//resultMap.add(structureInfo);}resultMap.add(item);resultMap.add(structureInfo);//break;}System.out.println(" result size : " + resultMap);}return resultMap;}

:w最后总结:
代码中有
Long id = Long.valueOf(String.valueOf(item.get(“id”)));

在写这个的时候,一开始用了toString,编译不报错但运行有错,也建议大家使用这种包围的方法取代.***的方法(这种问题一定会随着jdk的不断更新有所改正)

此外在对断点进行一步步跟踪到源代码时发现的问题触代码如下

如图所示我们在读过SQLsession等常规源码后发现代码执行到了此类中,并确认了SQL是否执行正确
在这里插入图片描述
在左下角即为控制程序执行的断点按钮,可以手动点击||,这样resume按钮就会变绿变亮

在这里插入图片描述

问题触发代码:↓↓↓
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/174259.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.让数组动起来

概述 对数组进行分析&#xff0c;目标如下 线性表的概念数组的存储结构数组查询&#xff0c;插入&#xff0c;删除操作的特点及对应的时间复杂度刷题(盛最多水的容器) 线性表 在数据结构中&#xff0c;数据的逻辑结构分为线性结构和非线性结构 线性结构: n个数据元素有序集合…

基于深度学习的单图像人群计数研究:网络设计、损失函数和监控信号

摘要 https://arxiv.org/pdf/2012.15685v2.pdf 单图像人群计数是一个具有挑战性的计算机视觉问题,在公共安全、城市规划、交通管理等领域有着广泛的应用。近年来,随着深度学习技术的发展,人群计数引起了广泛的关注并取得了巨大的成功。通过系统地回顾和总结2015年以来基于深…

Kafka - 消息队列的两种模式

文章目录 消息队列的两种模式点对点模式&#xff08;Point-to-Point&#xff0c;P2P&#xff09;发布/订阅模式&#xff08;Publish/Subscribe&#xff0c;Pub/Sub&#xff09; 小结 消息队列的两种模式 消息队列确实可以根据消息传递的模式分为 点对点模式发布/订阅模式 这两…

数字孪生协同仿真:复杂电机篇

​01.简介 电机仿真是现代机电工程研究领域中的重要环节&#xff0c;始于20世纪后半叶&#xff0c;为工程师提供了一种研究、设计和优化各种电机系统的新方式。时至今日&#xff0c;从传统的电动机到现代的电动汽车动力系统&#xff0c;电机仿真技术在电机设计、性能分析和控制…

微信小程序项目案例之导游证考试刷题小程序

前言 很多计算机专业的同学在做毕设选题时不知道该如何选题&#xff0c;有的同学是已经选择了要开发一款小程序&#xff0c;但是又不知道开发哪类小程序。本篇将为大家介绍一个小程序的开发方向&#xff0c;考试刷题类小程序是目前比较火的小程序项目之一&#xff0c;在小程序…

深入解析 Spring Framework 中 @Autowired 注解的实现原理

摘要 关于Autowired注解的作用 Autowired 注解在Spring中的作用是实现依赖注入&#xff08;Dependency Injection&#xff09;&#xff0c;它用于自动装配&#xff08;autowiring&#xff09;Spring Bean 的依赖关系。具体来说&#xff0c; Autowired 注解有以下作用&#xf…

【rust/esp32】wsl2开发环境搭建与测试

文章目录 说在前面流程可能的问题wsl2相关rust相关vscode相关build相关 测试吐槽参考 说在前面 esp型号&#xff1a;esp32s3开发环境&#xff1a;wsl2rustc版本&#xff1a;rustc 1.73.0-nightlyesp idf版本&#xff1a;v5.1.1 流程 目前是按照这个demo的流程可以跑通修改demo…

win10 javaweb 项目8080端口被占用

文章目录 前言出现场景&#xff1a;解决思路&#xff1a; 前言 提示&#xff1a;生活该走向何处&#xff1f;也许你还不知道答案&#xff0c;但是你一定是答案的一部分。 出现场景&#xff1a; 解决思路&#xff1a; 找到运行的进程直接干掉 打开命令窗口&#xff08;win r…

手机平板摄像头如何给电脑用来开视频会议

环境&#xff1a; Iriun Webcam EV虚拟摄像头 钉钉会议 问题描述&#xff1a; 手机平板摄像头如何给电脑用来开视频会议 解决方案&#xff1a; 1.下载软件 手机端和电脑端都下载这个软件&#xff0c;连接同一局域网打开软件连接好 另外一款软件Iriun 也是一样操作 2.打…

【Linux】NTP服务器配置、时间修改

查看当前系统时间date修改当前系统时间date -s "2018-2-22 19:10:30"查看硬件时间hwclock --show修改硬件时间hwclock --set --date "2018-2-22 19:10:30"同步系统时间和硬件时间hwclock --hctosys保存时钟clock –w1.设置NTP Server服务检查系统是否安装n…

SpringBoot中CommandLineRunner详解(含源码)

文章目录 前言实例导入库application.yamlRunnerSpringBootCommandLineRunnerApplication执行结果 先后顺序示例OrderRunner1OrderRunner2执行结果 通常用法加载初始化数据示例 启动后打印应用信息示例 启动异步任务示例 接口健康检查示例 外部服务调用示例 参数校验示例 动态设…

Apache Doris (四十八): Doris表结构变更-替换表

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

力扣第968题 监控二叉树 c++ hard题 二叉树的后序遍历 + 模拟 + 贪心

题目 968. 监控二叉树 困难 相关标签 树 深度优先搜索 动态规划 二叉树 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1&#xff1a; …

在CentOS上用yum方式安装MySQL8真实全过程记录(顺利版本)

此文参考我前面的文章《在CentOS上用yum方式安装MySQL8过程记录》&#xff0c;之前比较曲折&#xff0c;现在再安装一台mysql。 因为之前很多坑已经走过&#xff0c;加上这台Linux之前没安装过MYSQL&#xff0c;所以整个过程算是非常顺利。 安装环境&#xff1a;centos7 mysql…

如何实现可靠的数据调度同步,数据同步方案看一下!

随着企业规模不断扩大&#xff0c;分支机构越来越多&#xff0c;跨区域跨国的集团越来越多&#xff0c;越来越多的企业要求内部各种业务数据在服务器、数据中心甚至云上&#xff0c;能够进行实时的调度和同步&#xff0c;从而需要部署一套数据同步方案&#xff0c;实现服务器与…

甘特图组件DHTMLX Gantt用例 - 如何自定义任务、月标记和网格新外观

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。 本文将为大家揭示DHTMLX Gantt自定义的典型用例&#xff0c;包括自定义任务、网格的新外观等&#xff0c;来展示其功能的强大性&…

浙江爱知道控股集团,数字化经营的实践者,科技降本增效,助力基业长青

拥抱时代浪潮&#xff0c;加速科技变革。10月27日&#xff0c;浙江爱知道控股集团于西子智慧产业园西子音乐厅举办“AIGC可持续发展峰会”&#xff0c;重点探讨了数字化经营的重要意义。 提高效率和降低成本&#xff1a;数字化经营可以优化和自动化企业的业务流程&#xff0c;提…

软信天成:数据质量管理对企业有什么意义?

在这个信息爆炸的时代&#xff0c;数据已经成为了企业决策的基础&#xff0c;是企业成功的关键要素。然而&#xff0c;如果企业所获取的数据质量不佳&#xff0c;会对企业产生何种影响呢&#xff1f; 事实上&#xff0c;有效而准确的数据可以揭示出潜在的业务机遇&#xff0c;…

接触式静电压测量仪的用途和操作方法

接触式静电压测量仪是一种用于测量静电电荷的仪器&#xff0c;主要用于工业生产和科学研究领域。它可以测量静电电压、静电场强、静电电荷等参数&#xff0c;对于静电控制和环境监测等方面具有重要的作用。 接触式静电压测量仪的操作方法如下&#xff1a; 接通电源&#xff1a;…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(1)

先看卷积是啥&#xff0c;url: https://www.bilibili.com/video/BV1JX4y1K7Dr/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 下面这个式子就是卷积 看完了&#xff0c;感觉似懂非懂 下一个参考视频&#xff1a;https://www.y…