对
Vector
、ArrayList
在迭代的时候如果同时对其进行修改时抛出的异常
参考
原因
迭代器的next()
方法在返回下一个时会判断预期执行次数和实际次数
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
增加、删除和修改都会导致modCount+1
。
解决
- 单线程下可以使用迭代器
Iterator
对象下的add
、remove
等方法,这些方法在调用list
的响应方法后还会更新expectedModCount
- 多线程下可以使用
CopyOnWriteArrayList
,或者迭代的代码加锁变成同步代码块。 - 因为迭代的时候每个线程都是单独的迭代器,所以换成
Vector
也没用
网友评论