我在多线程编程时遇到异常。
我一开始看到它,但我不知道如何解决它。
然后我搜索ConcurrentModificationException然后它说
ConcurrentModificationException仅用于检测错误
这是什么意思?也许它说“你应该只抓住这个例外”不是吗?不是吗?
我应该解决吗?
答案 0 :(得分:2)
Javadoc解释了通常导致此异常的情况:
检测到并发的方法可能抛出此异常 在不允许进行此类修改时修改对象。
例如,一个线程修改a通常不允许 集合,而另一个线程正在迭代它。一般来说, 在这些情况下,迭代的结果是不确定的。一些 迭代器实现(包括所有集合的实现) JRE提供的实现可以选择抛弃它 检测到此行为的异常。执行此操作的迭代器是 称为失败快速迭代器,因为它们快速而干净地失败 冒着不确定的任意,非确定性行为的风险 未来的时间。
在该文档中,“ConcurrentModificationException仅用于检测错误”意味着您不应该在代码中捕获它并尝试恢复。您应该追踪导致它的错误,并修复错误。
答案 1 :(得分:0)
ConcurrentModificationException
。
是的,您需要找到错误并解决问题。
尝试在迭代时修改您是否正在修改,或者在更改集合时涉及任何其他线程。你需要搞清楚。
你能发布你的代码吗?
答案 2 :(得分:0)
你永远不应该抓住这个例外。您必须找出抛出异常的原因并修复代码。另请注意,每次都不会抛出此异常。因此,如果您测试一次并且异常消失,您仍可能遇到问题。解决这个问题的最好方法是编写好的并发测试用例。这仍然不是防弹,但它是你能做到的最好的事情。
总结一下,是的,你必须解决这个异常,正确地做这件事可能会非常具有挑战性。如果您正在处理生产代码,我建议您获取代码帮助。