【发布时间】:2018-03-10 12:03:49
【问题描述】:
在我的 Android 应用中,我在地图上绘制一些航点时使用此代码
Iterator<Waypoint> iterator = waypoints.iterator();
while (iterator.hasNext()) {
Waypoint w = iterator.next();
}
但是我收到了这个错误
致命异常:java.util.ConcurrentModificationException java.util.ArrayList$ArrayListIterator.next(ArrayList.java:573)
我不直接在我正在迭代的循环中修改列表。
但我可能会在另一个线程中修改列表,因为用户可以移动一些航点。并且航点的绘制可以在用户使用触摸屏移动航点的同时进行。
我能以某种方式避免该异常吗?
【问题讨论】:
-
你不能把
another reference变成same list吗?还是会conflict? -
这行不通,因为底层列表是一样的。只是引用会不同。
-
您的代码多久正确执行一次? ConcurrentModificationException 多久发生一次?如果是例如每秒执行几次的绘制例程我只会捕获异常并重新启动迭代。因为用户的行为通常非常缓慢,并且不会每秒增加十几个点。
标签: java android iterator concurrentmodification