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