理解和解决Java并发修改异常:ConcurrentModificationException
參考文獻:https://www.jianshu.com/p/f3f6b12330c1
文獻来源:简书
关键字: Java Exception
遇到异常信息Exception in thread "main" java.util.ConcurrentModificationException。
假设我们要实现这样一个例子: 判断集合里面有没有"Bi-Hu"这个元素,如果有,就在其后面添加一个"向北"元素
import java.util.*;
public class Main {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("Bi-Hu");
list.add("a");
list.add("a");
Iterator iterator = list.iterator();
while(iterator.hasNext()){
String s = (String) iterator.next();
if ("Bi-Hu".equals(s)){
list.add("向北");
}
}
}
}
那么它是会出现并发异常的 , 因为呢:
- ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
- 产生的原因:
迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,所以就报错了,这个错叫并发修改异常。 - 简单描述就是:迭代器遍历元素的时候,通过集合是不能修改元素的。
解决方案:
1.用 for 循环代替 while 增强型for循环也是会报错的
2.不要用 Iterator 换成 ListIterator
这里注意的是:
1.用 ListIterator 后面是 list.listIterator(); 并不是 list.Iterator(); 即:用 Iterator 时 用 list.Iterator() 获取实例 , 用 ListIterator 时 用 list.ListIterator () 获取实例。
2.用list.listIterator时,添加元素时不能用实例来添加 只能通过list迭代器的方法,即:
listIterator.add("Bi-Hu");
import java.util.*;
public class Main {
public static void main(String[] args) {
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("Bi-Hu");
list.add("a");
list.add("a");
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
String str = (String) listIterator.next();
if (str.equals("Bi-Hu")) {
listIterator.add("向北");
}
}
System.out.println(list);
//[a, b, Bi-Hu, 向北, a, a] 可以看到 是在 Bi-Hu 后添加进去
}
}
TiPS: 其实吧 :
listIterator 比 Iterator 功能方法多得多 ,这就要靠你自己去看API了! 不看Api 还学什么编程啊...
总结: 迭代器遍历元素的时候,通过集合是不能修改元素的。
理解和解决Java并发修改异常:ConcurrentModificationException的更多相关文章
- 理解和解决Java并发修改异常ConcurrentModificationException(转载)
原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java ...
- 集合框架之——迭代器并发修改异常ConcurrentModificationException
问题: 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. 使用普通迭代器出现的异常: ...
- 大杂烩 -- Iterator 并发修改异常ConcurrentModificationException
基础大杂烩 -- 目录 大杂烩 -- Java中Iterator的fast-fail分析 大杂烩 -- Iterator 和 Iterable 区别和联系 问题: 在集合中,判断里面有没有" ...
- 并发修改异常ConcurrentModificationException
1.简述:在使用 迭代器对象遍历集合时,使用集合对象修改集合中的元素导致出现异常 public static void main(String[] args) { List<Integer> ...
- ConcurrentModificationException(并发修改异常)的解决
[异常解释] ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.[产生的原因] 迭代器是依赖于集合而存在的,在判断成功后,集合 ...
- ConcurrentModificationException 集合并发修改异常 解决
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; /** * 问题? * 有一个集合, ...
- 【Java笔记】以并发修改异常为例总结的出错解决办法
先来看出错代码: /*需求: 遍历已有集合 如果在集合中发现存在字符串元素"world" 则在"world"后添加元素"javaee" */ ...
- java 15 - 8 集合框架(并发修改异常的产生原因以及解决方案)
问题? 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. 面试题: Concu ...
- Java基础知识强化之集合框架笔记19:List集合迭代器使用之 并发修改异常的产生原因 以及 解决方案
1. 我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现. ConcurrentModi ...
随机推荐
- 漫画 | C语言哭了,过年回家,只有我还没对象
C语言回家过年,遇到不少小伙伴. 大家都在外地打拼,一年难得见面,聚到一起吃饭,都非常高兴. 听Java提到TIOBE, 正在喝酒的C语言激动起来. 自己常年在那里排名第二,人类用自己写的程序可真不少 ...
- [转]SIFT,SURF,ORB,FAST 特征提取算法比较
转载地址:https://blog.csdn.net/vonzhoufz/article/details/46461849 主要的特征检测方法有以下几种,在一般的图像处理库中(如opencv, VLF ...
- (转)IP协议详解之子网寻址、子网掩码、构造超网
原文网址:http://www.cnblogs.com/way_testlife/archive/2010/10/05/1844399.html 子网寻址 1. 从两级IP地址到三级IP地址 < ...
- Glibc堆管理机制基础
最近正在学习linux下堆的管理机制,收集了书籍和网络上的资料,以自己的理解做了整理,做个记录.如果有什么不对的地方欢迎指出! Memory Allocator 常见的内存管理机制 dlmalloc: ...
- getter和setter以及defineProperty的用法
getter 和 setter 和 defineProperty getter:将对象属性绑定到查询该属性时将被调用的函数 说人话就是,当你调用一个getter属性时会调用定义好的get函数,这个函数 ...
- R语言学习4:函数,流程控制,数据框重塑
本系列是一个新的系列,在此系列中,我将和大家共同学习R语言.由于我对R语言的了解也甚少,所以本系列更多以一个学习者的视角来完成. 参考教材:<R语言实战>第二版(Robert I.Kaba ...
- 2021-2-27:Linux 下如何优化 Java MMAP 写入
主要是调整 pdflush 相关参数. 在linux操作系统中,写操作是异步的,即写操作返回的时候数据并没有真正写到磁盘上,而是先写到了系统cache里,随后由pdflush内核线程将系统中的脏页写到 ...
- openwrt编译加载龙尚U9300模组上网
硬件平台:MT7628A openwrt版本:MTK_SDK 1.添加模组信息 /build_dir/target-mipsel_24kc_musl/linux-ramips_mt76x8/linux ...
- js中数据、内存、变量的概念及三者之间的关系
目录 数据.内存.变量的概念及三者之间的关系 什么是数据 数据的特点 什么是内存 栈内存 堆内存 JS引擎如何管理内存 什么是变量 变量是普通类型时 变量是引用类型时 数据.内存.变量的三者之间的关系 ...
- 后端程序员之路 22、RESTful API
理解RESTful架构 - 阮一峰的网络日志http://www.ruanyifeng.com/blog/2011/09/restful.html RESTful API 设计指南 - 阮一峰的网络日 ...