美文网首页
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