java 并发修改_理解和解决Java并发修改异常ConcurrentModificationException
your name.jpg
关键字: Java Exception
不知读者在Java开发的过程中有没有遇到类似的异常信息 Exception in thread "main" java.util.ConcurrentModificationException, 下面小编简单介绍异常原因以及这种异常的改进方法,内容很简单,有什么问题还望指正。
假设我们要实现这样一个例子: 判断集合里面有没有"world"这个元素,如果有,就添加一个"javaee"元素
出现异常的代码如下:
import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
ArrayList array = new ArrayList();
// 创建并添加元素
array.add("hello");
array.add("world");
array.add("java");
Iterator it = array.iterator();
while (it.hasNext()) {
String s = (String) it.next();
if ("world".equals(s)) {
array.add("javaee");
}
}
}
}
1.异常解释
ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
产生的原因:
迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。
简单描述就是:迭代器遍历元素的时候,通过集合是不能修改元素的。
如何解决呢?
A:迭代器迭代元素,迭代器修改元素
B:集合遍历元素,集合修改元素(普通for)
2.下面用两种方法去解决这个异常
import java.util.ArrayList;
public class Test {
public static void main(String[] args) {
ArrayList array = new ArrayList();
// 创建并添加元素
array.add("hello");
array.add("world");
array.add("java");
// 方式1:迭代器迭代元素,迭代器修改元素
// 而Iterator迭代器却没有添加功能,所以我们使用其子接口ListIterator
// ListIterator lit = array.listIterator();
// while (lit.hasNext()) {
// String s = (String) lit.next();
// if ("world".equals(s)) {
// lit.add("javaee");
// }
// }
// System.out.println("list1:" + array);
// 方式2:集合遍历元素,集合修改元素(普通for)
for (int x = 0; x < array.size(); x++) {
String s = (String) array.get(x);
if ("world".equals(s)) {
array.add("javaee");
}
}
System.out.println("list2:" + array);
// 方式3:增强for循环
// 增强for循环写的话会报同样的错误,因为它本身就是用来替代迭代器的
// for (String s : array) {
// if ("world".equals(s)) {
// array.add("javaee");
// }
// }
// System.out.println("list3:" + array);
}
}
java 并发修改_理解和解决Java并发修改异常ConcurrentModificationException相关推荐
- 理解和解决Java并发修改异常ConcurrentModificationException(转载)
原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java ...
- eclipse 收缩 选择行_一文解决Java初学者的选择难题
很多Java初学者在刚开始会被一些诸如环境搭建.软件构建等问题所迷惑,本文将给出答案,帮助初学者找到正确答案,快速上手Java开发. Java Logo 全文答案 Java的版本: Java8 开发环 ...
- Java内存泄露的理解与解决
Java内存管理机制 在C++语言中,如果需要动态分配一块内存,程序员需要负责这块内存的整个生命周期.从申请分配.到使用.再到最后的释放.这样的过程非常灵活,但是却十分繁琐,程序员很容易由于疏忽而忘记 ...
- java class修改_【原创】Java基础之简单修改jar包中的class
有时需要修改很多jar(假设这些jar都位于lib目录)中其中一个jar中的某一个类,而且又没有原始代码或ide,这时最简单的方式是: 1 进入lib目录 #cd lib#ls test.jar de ...
- Java异常捕获论文_一篇文章解决Java异常处理
前言 与异常相关的内容其实很早就想写了,但由于各种原因(懒)拖到了现在.在大二开学前夜(今天是8.31)完成这篇博客,也算完成了暑期生活的一个小心愿. 以下内容大多总结自<Java核心技术 卷Ⅰ ...
- java六个必须理解的问题+java学习方法
对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容均来自于CSDN的经典老贴. ...
- java python算法_用Python,Java和C ++示例解释的排序算法
java python算法 什么是排序算法? (What is a Sorting Algorithm?) Sorting algorithms are a set of instructions t ...
- 做Java头发少_这35个Java代码优化细节,你用了吗
链接:https://www.jianshu.com/p/6e472304b5ac 前言 代码 优化 ,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有 ...
- java future用法_纯干货:Java学习过程中的21个知识点和技术点
我们在Java学习过程中要学会抓重点,善于总结,Java学习过程中常见的21个知识点和技术点你知道吗?下面和千锋广州小编一起来看看吧! 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识 ...
最新文章
- python使用imbalanced-learn的RepeatedEditedNearestNeighbours方法进行下采样处理数据不平衡问题
- 医学+数据科学,必将大有可为 | 清华生物医学影像研究中心赵锡海
- Django中html里的分页显示
- SQL Server数据库查询速度慢的原因和解决方法
- 地摊经济和夜经济-国情讲坛·周荣江:城市生态谋定治理转型
- spring boot整合mybatis+通用mapper+pagehelper分页插件
- windows7+tomcat7+nginx1.11.3 +memcached
- 什么是计算机应用上机报告,计算机应用实验报告样本.doc
- easyui源码翻译1.32--Window(窗口)
- C#中的Json的序列化和反序列化
- 华泰证券高薪诚聘 技术大牛/运维平台架构师
- SQLServer 2000个人版下载
- HDU 4093 Xavier is Learning to Count FFT + 容斥原理 2011年上海现场赛C题
- 树莓派4b自带wifi_树莓派raspberry4B入坑指南 part-11 在命令行中设置wifi
- 数据分析师工作的一点点感悟
- 教你一招,解决C盘空间不足问题
- matlab ode45的使用
- 位图字体生成工具 BMFont汉化版
- 一个计算机专业学生几年的Java编程经验汇总
- android一键清理任务,Android 一键清理、内存清理功能实现
热门文章
- iOS项目之交换方法(runtime)
- 推荐:浏览器是怎样工作的?
- 12.委托是什么?委托的property声明用什么属性?为什么?
- 错误 SQL TOP子句中的行数必须是整数
- office在线编辑器
- 世界机器人大会特种机器人报到高难度的高危险的活让它们来!
- Linux下gcov和lcov代码覆盖率分析(C/C++覆盖率在NGINX测试中的应用)
- oracle判断侦听状态,oracle 监听状态为BLOCKED
- java对象比较 hashcode_Java Objects.hash()与自己实现的hashCode()比较
- jstat 内存泄漏_一次Java内存泄漏的排查!要了自己的老命!