1. 程式人生 > >崩潰修改:ConcurrentModificationException 實戰

崩潰修改:ConcurrentModificationException 實戰

實戰:通過騰訊的 bugly 反饋的問題

截圖1.jpeg

解決 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