美文网首页
ConcurrentModificationException

ConcurrentModificationException

作者: 南山村靓仔 | 来源:发表于2020-05-18 17:40 被阅读0次

报错信息如下

java.lang.IllegalStateException: Fatal Exception thrown on Scheduler.
    at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(TbsSdkJava:111)
    at android.os.Handler.handleCallback(Handler.java:815)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5631)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
Caused by: java.util.ConcurrentModificationException
    at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic.removeVideoCache(TbsSdkJava:476)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic.switchTpl(TbsSdkJava:344)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic.access$200(TbsSdkJava:34)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic$1.onNext(TbsSdkJava:122)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic$1.onNext(TbsSdkJava:117)
    at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(TbsSdkJava:52)
    at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(TbsSdkJava:200)
    at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(TbsSdkJava:252)
    at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(TbsSdkJava:109)
    ... 8 more
java.util.ConcurrentModificationException
    at java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic.removeVideoCache(TbsSdkJava:476)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic.switchTpl(TbsSdkJava:344)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic.access$200(TbsSdkJava:34)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic$1.onNext(TbsSdkJava:122)
    at com.mapgoo.msgsys.logic.MsgSysPushLogic$1.onNext(TbsSdkJava:117)
    at io.reactivex.internal.operators.observable.ObservableMap$MapObserver.onNext(TbsSdkJava:52)
    at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(TbsSdkJava:200)
    at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(TbsSdkJava:252)
    at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(TbsSdkJava:109)
    at android.os.Handler.handleCallback(Handler.java:815)
    at android.os.Handler.dispatchMessage(Handler.java:104)
    at android.os.Looper.loop(Looper.java:194)
    at android.app.ActivityThread.main(ActivityThread.java:5631)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

原因分析:
ArrayList非线程安全的缺陷,在遍历arraylist的时候,执行remove操作导致

解决办法:
1、同步锁,直接使用CopyOnWriteArrayList
2、新建一个辅助List,遍历时,删除辅助List中的元素

相关文章

网友评论

      本文标题:ConcurrentModificationException

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