当我运行这段代码时,我收到了“发生异常:java.util.ConcurrentModificationException”。这里有人看到问题所在吗?
public void mudaDeEstado() {
Luz luz = new Luz();
while(this.iterador.hasNext()) {
luz = (this.iterador.next());
luz.defineEstado(!luz.acesa());
}
}
非常感谢!!
答案 0 :(得分:7)
您正在尝试修改迭代器在循环遍历元素时保留的引用。您可以阅读有关其例外here的更多信息。
例如,一般情况下并非如此 一个线程允许修改a 收集而另一个线程是 迭代它。一般来说, 迭代的结果是未定义的 在这些情况下。一些 迭代器实现(包括 所有通用目的 集合实现由 JRE)可能会选择扔这个 异常,如果这种行为是 检测。执行此操作的迭代器是 称为失败快速迭代器,因为它们 快速而干净地失败,而不是那样 冒着任意,不确定的风险 在一个不确定的时间的行为 未来。
这里的罪魁祸首很可能就是:
luz.defineEstado(!luz.acesa());
答案 1 :(得分:1)
在迭代数据结构时修改数据结构时会抛出此异常。更改数据结构中的元素可以改变迭代元素的方式,因此许多数据结构不允许并发修改。
尝试保留需要更新的元素列表,然后在遍历整个数据结构后返回并更新这些元素。
对不起,我的措辞有点笼统,含糊不清,但很难用提供的代码给出细节。