【发布时间】:2016-10-27 05:30:33
【问题描述】:
大家好,我有一个小问题。我正在为 android 编写一个应用程序,我的部分代码是这样的。
public void loop(){
for(Car car:carList)
car.run();
}
我收到错误 java.util.ConcurrentModificationException 我还尝试使用迭代器来快速解决问题。 另外,我使用 synchronized 因为我检查了 oracle 文档中的错误,它说这可能是由许多线程使用相同的代码引起的。
public synchronized void loop(){
Iterator<Car> carIterator = carList.iterator();
while(cardIterator.hasNext()){
carIterator.next().run();
}
}
我真的不知道为什么我找到的任何解决方案都不起作用。大多数情况下,我在后台服务中使用这部分代码,并且我也在活动中使用包含该方法(使用单例)的类。 在此先感谢所有社区
感谢大家的支持, -carList 是 Car 对象的 ArrayList。 我的车课是这样的
public class Car{
private int mSpeed;
private int mDistance; //zero at first
........
public void run(){
mSpeed=getRandomSpeed();
mDistance+=mSpeed;
updateDistanceInDB();//here I sabe the distance in DB using a DB helper
}
.........
}
-错误表示在执行run方法的那一行产生 有点奇怪,因为该应用在我拥有的另一台设备上运行良好。
【问题讨论】:
-
我们能看到
Car#run()的代码吗?您还应该告诉我们carList是什么 -
是否可以从其他线程访问
carList?还是car.run()碰巧修改了carList? -
java.util.ConcurrentModificationException 当您尝试修改集合对象并同时循环遍历它时出现。您可能需要在循环之前将 carList 复制到其他列表。
-
规则 #0:当询问有关异常的问题时,您必须发布完整的堆栈跟踪并确定代码中导致异常的行。
标签: java android multithreading arraylist