2011-10-18 96 views
1

我发现多线程编程异常。我们是否需要解决ConcurrentModificationException?

我看到了它在第一,但我不知道如何解决它。

然后我搜索一下ConcurrentModificationException的,然后它说

ConcurrentModificationException的应该仅用于检测bug

是什么意思?也许它说“你应该只捕获这个异常”不是吗?或不??

我应该解决吗?

回答

2

Javadoc的解释,通常会导致该异常的情况下:

此异常可能由已检测到的并发 修改一个对象的当这样的修改是不允许的方法被抛出。

例如,它不是一般的permssible而另一个线程上进行迭代一个线程修改 集合。通常,在这些情况下,迭代的结果是不确定的。有些 迭代器实现(包括所有那些由JRE提供的搜集 实现)可能选择是否检测到这种行为,抛出此 例外。迭代器做到这一点是 称为快速失败迭代器,因为他们很快就完全失败,而 ,在一个不确定的 在未来的时间冒着任意的,不确定性的行为。

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

0

ConcurrentModificationException当你修改的集合,而你迭代它的元素经常发生。

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

试图找出如果要修改,而迭代或任何其他线程参与改变的集合。你需要弄清楚。

你可以发布你的代码吗?

0

你不应该接受这个例外。您必须了解抛出异常的原因并修复代码。还要注意,这个异常不会每次都抛出。所以如果你测试一次,异常消失,你仍然可能会遇到问题。处理这个问题的最好方法是编写好的并发测试用例。这仍然不是防弹的,但它是你能做的最好的事情。

总而言之,是的,你必须解决这个例外,正确地做到这一点非常具有挑战性。如果您正在处理生产代码,我建议您获取有关代码的帮助。

相关问题