从列表中删除对象同时还运行另一个列表会返回错误

时间:2015-06-23 15:29:25

标签: java foreach iteration

因此,使用此代码,我将通过列表并删除对象。

    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错误,但是我想修复它,我不知道该怎么做。

如果有人可以帮助我,那就太好了。

2 个答案:

答案 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 可以很好地处理多线程。您可以搜索它以获取更多详细信息。