Iterator it = al.iterator();
while (it.hasNext())
{
Object obj = it.next();
if (obj.equals("java02"))
al.add("java09"); //修改了modCount的值,导致程序抛出异常
System.out.println("obj="+obj);
}
}
}
/*
运行结果:
obj=java01
obj=java02
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at ListDemo.main(ListDemo.java:17)
*/
我们使用的迭代器在调用next()调用了改方法checkForComodification(),当每次检查modCount != expectedModCount就会抛出该异常,
下面我们来再次分析我们的代码 modCount是集合每次在调用remove和add方法时都会记录修改次数modCount++,但是我们迭代产生后expectedModCount就是一个固定值了,所以你只要在迭代时修改了集合就会造成modCount != expectedModCount,所以就抛出了ConcurrentModificationException作者: 程振 时间: 2012-9-16 10:31
If a thread modifies a collection directly while it is iterating over the collection with a fail-fast iterator, the iterator will throw this exception——ConcurrentModificationException
"From the field of soft engineering, a Fail Fast Iterator is an Iterator that attempts to raise an error if the sequence of elements precessed by the Iterator is changed during Iteration"