迭代列表或映射的哪個代碼序列可防止出現ConcurrentModificationException?在我們的代碼中,我們有多次和零星的ConcurrentModificationException。這個問題有兩個原因。防止Java中出現零星的ConcurrentModificationException的最佳做法是什麼?
- 另一個線程變化對迭代
- 這就是所謂在環是改變列表的方法的列表。
問題1可以通過在循環周圍同步來解決。但是,如果外部代碼在循環中被稱爲原因2,則這是不好的。
問題2可以通過列表或映射的副本來解決。
這意味着列表或映射必須在循環前複製到同步塊中。有更好的解決方案嗎?
一些示例代碼:
public void todoSomeThings(Map<Abc, Object> map){
for(Abc abc : map.keySet()){
abc.todoSomeThings();
}
}
在大多數情況下,無法更改列表或地圖的類型,因爲它是一個參數。 – Horcrux7 2011-01-11 08:58:22