崩溃修改:ConcurrentModificationException

实战:通过腾讯的 bugly 反馈的问题

《崩溃修改:ConcurrentModificationException》 截图1.jpeg

解决 Kwai-pro 的bug,因为如果每次都是通过 .getMessage() 方法获取,有可能有别的线程在操作该数据集,导致 ConcurrentModificationException 的出现

《崩溃修改:ConcurrentModificationException》 截图2.jpeg

解决方案:

该异常表示迭代器迭代过程中,迭代的对象发生了改变,如数据项增加或删除。

[解决方案]:
由于迭代对象不是线程安全,在迭代的过程中,会检查 modCount 是否和初始 modCount 即 expectedModCount 一致,如果不一致,则认为数据有变化,迭代终止并抛出异常。常出现的场景是,两个线程同时对集合进行操作,线程1对集合进行遍历,而线程2对集合进行增加、删除操作,此时将会发生 ConcurrentModificationException 异常。

具体方法:多线程访问时要增加同步锁,或者建议使用线程安全的集合:

  • 1、使用 ConcurrentHashMap 替换 HashMap,CopyOnWriteArrayList 替换 ArrayList
  • 2、或者使用使用 Vector 替换 ArrayList,Vector 是线程安全的。Vector 的缺点:大量数据操作时,由于线程安全,性能比 ArrayList 低

——乐于分享,共同进步,欢迎补充
——Any comments greatly appreciated
——诚心欢迎各位交流讨论!QQ:1138517609
——CSDN:https://blog.csdn.net/u011489043
——简书:https://www.jianshu.com/u/4968682d58d1
——GitHub:https://github.com/selfconzrr

    原文作者:BugFree张瑞
    原文地址: https://www.jianshu.com/p/a9eae49802f0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞