崩溃修改:ConcurrentModificationExcep
2018-12-12 本文已影响19人
BugFree张瑞
截图1.jpeg实战:通过腾讯的 bugly 反馈的问题
解决 Kwai-pro 的bug,因为如果每次都是通过 .getMessage() 方法获取,有可能有别的线程在操作该数据集,导致 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