美文网首页
ConcurrentModificationException

ConcurrentModificationException

作者: 策马踏清风 | 来源:发表于2020-04-03 15:44 被阅读0次

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

原因

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

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

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

解决

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

相关文章

网友评论

      本文标题:ConcurrentModificationException

      本文链接:https://www.haomeiwen.com/subject/cqohphtx.html