因此,使用此代码,我将通过列表并删除对象。
public void setUpgradeClicked(){
for (Iterator<Upgrade> iterator = displayedUpgrades.iterator(); iterator.hasNext();) {
Upgrade u = iterator.next();
if (u.clicked) {
iterator.remove();
}
}
}
同时此代码正在运行
for(Upgrade u : displayedUpgrades){
u.dostuff();
}
所以当然我会得到一个ConcurrentModificationException错误,但是我想修复它,我不知道该怎么做。
如果有人可以帮助我,那就太好了。
答案 0 :(得分:0)
迭代时无法添加。最好的事情是在迭代期间制作要添加的项目的子列表,然后使用子列表执行所需的操作
请参阅Concurrent Modification Exception : adding to an ArrayList
http://durgaprasadtechie.blogspot.com/2011/07/concurrentmodificationexception-fail.html
答案 1 :(得分:0)
synchronized(u){
if (u.clicked) {
iterator.remove();
}
}
synchronized(u){
u.dostuff();
}
synchronized 可以很好地处理多线程。您可以搜索它以获取更多详细信息。