我在一个单独的线程(不是 UI 线程)上运行这段代码
strains = new ArrayList<Strain>();
for (Breeder b : breeders) {
for (Strain s : b.getStrains()) {
strains.add(s);
}
}
它有时会导致 ConcurrentModificationException。 我知道我不能在我正在迭代的集合中添加或删除对象,但在这个 fragment 中我没有迭代菌株。我哪里错了?谢谢
最佳答案
Synchronize您的访问权限。这种卡住当前的breeder
对象,这样它就不会在任何其他线程中被修改。尝试这样做的方法将被阻止。阻塞意味着它们只是等待(如 System.sleep(x)),直到另一个线程中的 synchronized
block 已被处理。
synchronized(breeders) {
for (Breeder b : breeders) {
for (Strain s : b.getStrains()) {
strains.add(s);
}
}
}
确保您还为其他线程访问 breeders
设置了 synchronized
。
关于java - 循环中的 ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324310/