java.util.ConcurrentModificationException異常(轉(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();
        }
      }