1

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

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

}

非常感谢!!

4

2 回答 2

7

您正在尝试修改迭代器在循环遍历元素时所持有的引用。您可以在此处阅读有关他的例外的更多信息。

例如,通常不允许一个线程在另一个线程对其进行迭代时修改 Collection。一般来说,在这些情况下,迭代的结果是不确定的。如果检测到此行为,某些迭代器实现(包括 JRE 提供的所有通用集合实现的那些)可能会选择抛出此异常。这样做的迭代器被称为快速失败迭代器,因为它们快速而干净地失败,而不是在未来不确定的时间冒着任意的、非确定性的行为的风险。

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

luz.defineEstado(!luz.acesa());
于 2011-02-21T20:32:02.713 回答
2

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

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

对不起,我的措辞有点笼统和模棱两可,但很难用提供的代码给出细节。

于 2011-02-21T20:35:22.767 回答