并发修改异常的原理是是什么
当我们是使用遍历集合(List、Set、Map)的时候,获取当前集合的迭代对象,迭代器包含迭代器的remove()和集合本身的remove()。如果使用集合本身调用remove方法就会出现发修改异常,但用迭代器本身调用是没有问题的。
ConcurrentModificationException:并发修改异常
Collection collection = new ArrayList();
collection.add(1);
collection.add(2);
collection.add(3);
collection.add(4);
Iterator iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
// collection.remove(2);//使用集合本身操作会出现并发修改异常
iterator.remove();
}
//增强for循环的并发报错
for (Object ite:collection) {
System.out.println(ite);
// collection.remove(2);//使用集合本身操作会出现并发修改异常
}
由代码可以看出来collection.remove(2)是用集合本身获取的remove方法,所以会报错,并发修改异常。
所以在以后使用迭代器,要用到增删操作时,要使用迭代器本身调用它的方法。