循环中的ConcurrentModificationException

时间:2013-03-10 16:03:31

标签: java android collections iteration concurrentmodification

我在单独的线程(不是UI线程)上运行此代码

strains = new ArrayList<Strain>();
for (Breeder b : breeders) {
   for (Strain s : b.getStrains()) {
        strains.add(s);
    }
}

有时会导致ConcurrentModificationException。 我知道我无法在我正在迭代的Collection中添加或删除对象,但是在这个片段中,我并没有对菌株进行迭代。哪里我错了?感谢

1 个答案:

答案 0 :(得分:1)

Synchronize您的访问权限。这种冻结当前的breeder对象,因此不会在任何其他线程中修改它。尝试执行此操作的方法将被阻止。阻止意味着他们只是等待(如System.sleep(x)),直到另一个线程中的synchronized块被处理完毕。

synchronized(breeders) {
    for (Breeder b : breeders) {
       for (Strain s : b.getStrains()) {
            strains.add(s);
        }
    }
}

确保您还synchronized围绕其他线程访问breeders