Java的ConcurrentModifyicationException處理方法
1. 問題描述
程式跑到一半,出現java.util.ConcurrentModificationException是何問題?
2. 解決方案
此為因為Collection在執行迴圈時,逕行將此Collection的數據(資料)新增或移除,而導致程式執行到一半時,發生錯誤。
解決此問題為在執行迴圈時,嚴禁將此Collection中的數據(資料)新增或移除,而採用其他方式來達到程式所要的目的。底下Sample範例程式就因此問題而做出兩種解法供大家參考,第一將欲刪除的資料另外設定於Temp的Collection中,其二為採用Iterator的方式來設置。
3. Sample範例程式
案例簡述:
一個簡單的案例,在一個Collection中,要判斷所有的數據(資料),其中屬性字段(欄位)為activeYn,若為N者,必須移除於此Collection之外。
原始代碼(程式):
代碼(程式)於紅色方框邏輯中,符合此條件者,此數據(資料)會被移除於此Collection中,但是在For迴圈中直接remove,系統跑到此行時,會拋出錯誤型態為java.util.ConcurrentModificationException的錯誤。
修正方法一:
將代碼(程式)修正為採用Temp Collection方式,將所有Collection中的數據(資料),全部於迴圈中跑一次,若符合此條件者,將此數據(資料)加入於Temp Collection中,於迴圈跑完後,再執行後續的新刪作業。
修正方法二:
將代碼(程式)修正為採用Iterator的方式來處理,若發現有符合的數據(資料),直接採用Iterator的remove指令,即可將Collection中的數據移除。
沒有留言:
張貼留言