我得到以下异常:“java.util.ConcurrentModificationException”

时间:2011-02-21 20:28:00

标签: java concurrentmodification

当我运行这段代码时,我收到了“发生异常:java.util.ConcurrentModificationException”。这里有人看到问题所在吗?

public void mudaDeEstado() {
    Luz luz = new Luz();
    while(this.iterador.hasNext()) {
        luz = (this.iterador.next());
        luz.defineEstado(!luz.acesa());
    }

}

非常感谢!!

2 个答案:

答案 0 :(得分:7)

您正在尝试修改迭代器在循环遍历元素时保留的引用。您可以阅读有关其例外here的更多信息。

  

例如,一般情况下并非如此   一个线程允许修改a   收集而另一个线程是   迭代它。一般来说,   迭代的结果是未定义的   在这些情况下。一些   迭代器实现(包括   所有通用目的   集合实现由   JRE)可能会选择扔这个   异常,如果这种行为是   检测。执行此操作的迭代器是   称为失败快速迭代器,因为它们   快速而干净地失败,而不是那样   冒着任意,不确定的风险   在一个不确定的时间的行为   未来。

这里的罪魁祸首很可能就是:

luz.defineEstado(!luz.acesa());

答案 1 :(得分:1)

在迭代数据结构时修改数据结构时会抛出此异常。更改数据结构中的元素可以改变迭代元素的方式,因此许多数据结构不允许并发修改。

尝试保留需要更新的元素列表,然后在遍历整个数据结构后返回并更新这些元素。

对不起,我的措辞有点笼统,含糊不清,但很难用提供的代码给出细节。