ConcurrentModificationException

2020-05-18  本文已影响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中的元素

上一篇 下一篇

猜你喜欢

热点阅读