我在单独的线程(不是UI线程)上运行此代码
strains = new ArrayList<Strain>();
for (Breeder b : breeders) {
for (Strain s : b.getStrains()) {
strains.add(s);
}
}
有时会导致ConcurrentModificationException。 我知道我无法在我正在迭代的Collection中添加或删除对象,但是在这个片段中,我并没有对菌株进行迭代。哪里我错了?感谢
答案 0 :(得分:1)
Synchronize您的访问权限。这种冻结当前的breeder
对象,因此不会在任何其他线程中修改它。尝试执行此操作的方法将被阻止。阻止意味着他们只是等待(如System.sleep(x)),直到另一个线程中的synchronized
块被处理完毕。
synchronized(breeders) {
for (Breeder b : breeders) {
for (Strain s : b.getStrains()) {
strains.add(s);
}
}
}
确保您还synchronized
围绕其他线程访问breeders
。