ConcurrentModificationException

ConcurrentModificationException的原因以及解决措施

老子叫甜甜 提交于 2021-02-13 07:21:18
1. ConcurrentModificationException异常出现的原因 先看下面这段代码: package test; import java.util.ArrayList; import java.util.Iterator; public class test { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); list.add(2); Iterator<Integer> iterator = list.iterator(); while (iterator.hasNext()) { Integer integer = iterator.next(); if (integer == 2) list.remove(integer); } } } 运行结果: 从异常信息可以发现,异常出现在checkForComodification()方法中。   我们不忙看checkForComodification()方法的具体实现,我们先根据程序的代码一步一步看ArrayList源码的实现:   首先看ArrayList的iterator()方法的具体实现,查看源码发现在ArrayList的源码中并没有iterator()这个方法

Java ConcurrentModificationException 异常分析与解决方案

廉价感情. 提交于 2019-12-05 13:42:38
一、单线程 1. 异常情况举例 只要抛出出现异常,可以肯定的是代码一定有错误的地方。先来看看都有哪些情况会出现ConcurrentModificationException异常,下面以ArrayList remove 操作进行举例: 使用的数据集合: ? 1 2 3 4 5 6 7 List<string> myList = new ArrayList<string>(); myList.add( "1" ); myList.add( "2" ); myList.add( "3" ); myList.add( "4" ); myList.add( "5" );</string></string> 以下三种情况都会出现异常: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 Iterator<string> it = myList.iterator(); while (it.hasNext()) { String value = it.next(); if (value.equals( "3" )) { myList.remove(value); // error } } for (Iterator<string> it = myList.iterator(); it.hasNext();) { String