当前位置: 首页 > news >正文

ConcurrentModificationException 异常出现的原因和解决方案

ConcurrentModificationException 是一个操作 JAVA 集合时出现的修改异常

出现原因

1. 多线程环境:一个线程在遍历,另一个线程在修改,这两个线程同步进行,就会抛这个异常。

2. 单线程环境: 使用增强for遍历或者 Iterator 迭代器遍历过程中,修改集合元素,也会报错。

第二种情况代码演示:

List<Integer> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {list.add(i + 1);
}// 增强for
for (Integer integer : list) {if (integer == 2) {list.remove(integer);}
}// 迭代器
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {Integer next = iterator.next();if (next == 23) {list.remove(next);}
}

解决方案:

1. 使用线程安全的集合,像 Vector、CopyOnWriteArrayList、或使用Collections.synchronizedCollection() 方法对线程不安全的集合进行封装。

2. 使用并发安全的集合,像 ConcurrentHashMap。

3. 使用 synchronized 或 ReentrantLock 显示同步。

4. 使用 AtomicReference 等原子类进行原子操作。

关于迭代器(Iterator)可以移步这一篇博客了解更多:java中哪些集合可以使用 Iterator 进行遍历-CSDN博客


http://www.mrgr.cn/news/16472.html

相关文章:

  • 入坑大模型18个月的反思与贩私
  • 浪潮GS企业管理软件 UploadListFile 文件上传致RCE漏洞复现
  • ctfshow之web58~web71
  • langchain结合searXNG实现基于搜索RAG
  • 图像边缘检测Canny
  • Oracle数据库大小写问题注意点
  • 【三维重建】三角网格中轴骨架线提取
  • 聊聊 OceanBase 内存管理
  • 【QNX+Android虚拟化方案】112 - 获取 88Q5152 Switch Port1、Port2 端口的主从模式 / 传输速率 / 链路状态
  • vscode和edge浏览器等鼠标输入光标变透明
  • 根据xml模板导出excel
  • 解密电商大促背后的智慧:LSTM与ARIMA模型的双剑合璧
  • 求一个使用C语言将重力加速度gx,gy,gz积分获取到速度的代码
  • 如何开发针对不平衡分类的成本敏感神经网络 python
  • Web自动化测试实战--博客系统
  • 使用WSL在Windows上安装Linux
  • 51单片机.之ADC数字模拟转换
  • python网络爬虫(二)——数据的清洗与组织
  • 计算机毕业设计选题推荐-在线租房平台-房屋租赁系统-Java/Python项目实战
  • TeamTalk消息服务器(未读计数)