- ConcurrentModificationException
- ConcurrentModificationException
- ConcurrentModificationException
- ConcurrentModificationException异
- 从ConcurrentModificationException
- 抛ConcurrentModificationException
- ConcurrentModificationException并
- ConcurrentModificationException-
- ConcurrentModificationException异
- ConcurrentModificationException源
报错信息如下
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中的元素
网友评论