2011-10-18 94 views
1

我發現多線程編程異常。我們是否需要解決ConcurrentModificationException?

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

然後我搜索一下ConcurrentModificationException的,然後它說

ConcurrentModificationException的應該僅用於檢測bug

是什麼意思?也許它說「你應該只捕獲這個異常」不是嗎?或不??

我應該解決嗎?

回答

2

Javadoc的解釋,通常會導致該異常的情況下:

此異常可能由已檢測到的併發 修改一個對象的當這樣的修改是不允許的方法被拋出。

例如,它不是一般的permssible而另一個線程上進行迭代一個線程修改 集合。通常,在這些情況下,迭代的結果是不確定的。有些 迭代器實現(包括所有那些由JRE提供的蒐集 實現)可能選擇是否檢測到這種行爲,拋出此 例外。迭代器做到這一點是 稱爲快速失敗迭代器,因爲他們很快就完全失敗,而 ,在一個不確定的 在未來的時間冒着任意的,不確定性的行爲。

在該文檔中,「ConcurrentModificationException應該僅用於檢測錯誤」意味着您不應該在代碼中捕獲它並嘗試恢復。你應該追蹤導致它的錯誤,並修復錯誤。

0

ConcurrentModificationException當你修改的集合,而你迭代它的元素經常發生。

是的,你需要找到錯誤並解決問題。

試圖找出如果要修改,而迭代或任何其他線程參與改變的集合。你需要弄清楚。

你可以發佈你的代碼嗎?

0

你不應該接受這個例外。您必須瞭解拋出異常的原因並修復代碼。還要注意,這個異常不會每次都拋出。所以如果你測試一次,異常消失,你仍然可能會遇到問題。處理這個問題的最好方法是編寫好的併發測試用例。這仍然不是防彈的,但它是你能做的最好的事情。

總而言之,是的,你必須解決這個例外,正確地做到這一點非常具有挑戰性。如果您正在處理生產代碼,我建議您獲取有關代碼的幫助。

相關問題