java.util.ConcurrentModificationEx
ception異常(轉)
1、
今天在寫一個帶緩存功能的訪問代理程序時出現了java.util.ConcurrentModificationException異常,因為該異常是非捕獲型異常而且很少見,所以費了些時間才找到問題所在,原來在通過Iterator進行遍歷的時候,如果直接對HashMap進行操作后,再繼續用之前的Iterator進行遍歷就會出現這個異常,表示其HashMap已經被修改。
源程序代碼片段如下:caches為一個HashMap對象
String sameKeyPart = accesserClassName + "@" + methodName + "@" + parameterKeyString + "@";
Iterator keys = caches.keySet().iterator();
String key = null;
while (keys.hasNext()) ...{
key = (String) keys.next();
if (key.startsWith(sameKeyPart)) ...{
caches.remove(key);
}
}
解決辦法為通過其相應的Iterator進行刪除就可以了,修改后代碼片段如下:
String sameKeyPart = accesserClassName + "@" + methodName + "@" + parameterKeyString + "@";
Iterator keys = caches.keySet().iterator();
String key = null;
while (keys.hasNext()) ...{
key = (String) keys.next();
if (key.startsWith(sameKeyPart)) ...{
keys.remove();
}
}