撰寫多線程代碼時,你遇到過多少次下面的提示:
Exception in thread "main" java.util.ConcurrentModificationException
這個異常產生的原因有幾個。一是遍歷時直接對集合調用刪除操作而不是在枚舉器上。二是不同的線程試圖對集合進行增刪操作的時候。
下面的代碼則會拋出該異常:
for (String s : map.keySet()) {
if ("val".equals(s))
map.remove(s);
}
正確的方法應該這樣:
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String obj = it.next();
if ("2".equals(obj)) {
it.remove();
}
}