ConcurrentModificationException

2020-04-03  本文已影响0人  策马踏清风

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

原因

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

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

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

解决

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

猜你喜欢

热点阅读