java.util.ConcurrentModificationEx
ception異常(轉(zhuǎn))
1、
今天在寫一個(gè)帶緩存功能的訪問代理程序時(shí)出現(xiàn)了java.util.ConcurrentModificationException異常,因?yàn)樵摦惓J欠遣东@型異常而且很少見,所以費(fèi)了些時(shí)間才找到問題所在,原來在通過Iterator進(jìn)行遍歷的時(shí)候,如果直接對(duì)HashMap進(jìn)行操作后,再繼續(xù)用之前的Iterator進(jìn)行遍歷就會(huì)出現(xiàn)這個(gè)異常,表示其HashMap已經(jīng)被修改。
源程序代碼片段如下:caches為一個(gè)HashMap對(duì)象
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);
}
}
解決辦法為通過其相應(yīng)的Iterator進(jìn)行刪除就可以了,修改后代碼片段如下:
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();
}
}