我们需要解决ConcurrentModificationException吗?

时间:2011-10-18 15:29:52

标签: java

我在多线程编程时遇到异常。

我一开始看到它,但我不知道如何解决它。

然后我搜索ConcurrentModificationException然后它说

  

ConcurrentModificationException仅用于检测错误

这是什么意思?也许它说“你应该只抓住这个例外”不是吗?不是吗?

我应该解决吗?

3 个答案:

答案 0 :(得分:2)

Javadoc解释了通常导致此异常的情况:

  

检测到并发的方法可能抛出此异常   在不允许进行此类修改时修改对象。

     

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

在该文档中,“ConcurrentModificationException仅用于检测错误”意味着您不应该在代码中捕获它并尝试恢复。您应该追踪导致它的错误,并修复错误。

答案 1 :(得分:0)

当您在迭代其元素时修改集合时,通常会发生

ConcurrentModificationException

是的,您需要找到错误并解决问题。

尝试在迭代时修改您是否正在修改,或者在更改集合时涉及任何其他线程。你需要搞清楚。

你能发布你的代码吗?

答案 2 :(得分:0)

你永远不应该抓住这个例外。您必须找出抛出异常的原因并修复代码。另请注意,每次都不会抛出此异常。因此,如果您测试一次并且异常消失,您仍可能遇到问题。解决这个问题的最好方法是编写好的并发测试用例。这仍然不是防弹,但它是你能做到的最好的事情。

总结一下,是的,你必须解决这个异常,正确地做这件事可能会非常具有挑战性。如果您正在处理生产代码,我建议您获取代码帮助。