android java.util.ConcurrentModificationException中的奇怪错误

android java.util.ConcurrentModificationException中的奇怪错误,java,android,multithreading,arraylist,Java,Android,Multithreading,Arraylist,嗨,伙计们,我有个小问题。我正在为android编写一个应用程序,我的部分代码是这样的 public void loop(){ for(Car car:carList) car.run(); } 我得到了错误java.util.ConcurrentModificationException 为了快速解决问题,我还尝试使用迭代器。 另外,我使用了synchronized,因为我检查了oracle文档中的错误,它说这可能是由于许多线程使用相同的代码造成的 public s

嗨,伙计们,我有个小问题。我正在为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();
 }
}
-该错误表示它是在执行方法run
有一点奇怪,因为该应用程序在我拥有的另一台设备上运行良好。

解决此异常的最有力的方法是使用一个替代当前
列表的方法。这将确保在for-each循环期间不会在迭代期间看到列表的任何更新,因此不会引发
ConcurrentModificationException

根据其文件:

“快照”样式的迭代器方法使用对创建迭代器时数组状态的引用。此数组在迭代器的生存期内不会更改,因此不可能发生干扰,迭代器保证不会抛出
ConcurrentModificationException


但是,根据具体情况,可能有更好的方法来解决您的问题。查看您的代码中哪些部分对
列表进行了修改,并确保它们不会在迭代过程中运行。

我们可以查看
Car#run()
的代码吗?您还应该告诉我们可以从其他线程访问什么
carList
isIs
carList
?或者
car.run()
是否碰巧修改了
carList
曾经?java.util.ConcurrentModificationException出现在您试图修改集合对象并同时在其中循环时。在循环遍历之前,您可能必须将carList复制到其他列表中。请检查该列表并遵守规则#0:当询问有关异常的问题时,您必须发布完整的堆栈跟踪,并标识代码中导致异常的行。
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
   }
   .........   

}