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