0%

ConcurrentModificationException

文章字数:180,阅读全文大约需要1分钟

VectorArrayList在迭代的时候如果同时对其进行修改时抛出的异常
参考

原因

迭代器的next()方法在返回下一个时会判断预期执行次数和实际次数

1
2
3
4
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}

增加、删除和修改都会导致modCount+1

解决

  1. 单线程下可以使用迭代器Iterator对象下的addremove等方法,这些方法在调用list的响应方法后还会更新expectedModCount
  2. 多线程下可以使用CopyOnWriteArrayList,或者迭代的代码加锁变成同步代码块。
  3. 因为迭代的时候每个线程都是单独的迭代器,所以换成Vector也没用