Java Exception ConcurrentModificationException


在寫專案的時候發現了一個問題,由於要求所以必須使用 EJB..
再加上自己是 JSP 上面的新手,所以也花了很多時間去處理這個高深的學問.
在剛才又遇上了一個極大的挑戰就,就是要刪除購物籃的物品,不過卻又出現了

1
java.util.ConcurrentModificationException

而相關的代碼大約就是

1
2
3
4
5
// getItem() 是回傳 ArrayList
for(Object obj: this.getItem()) {
row = (Hashtable) obj;
if (row.get(column).equals(value)) this.item.remove(row);
}

最後的解決方法是使用 Iterator 的方法進行刪除

1
2
3
4
5
6
for (Iterator it = this.getItem().iterator();it.hasNext();){
Hashtable row = (Hashtable)it.next();
if (row.get(column).equals(value)) {
it.remove();
}
}

最後主要得到的原因是 fail-fast iterator (即第一種刪除方法) 會嘗試在 iterator 的過程中進行刪除
而第二種方法的 Iterator,卻擁有一個獨立的線程,而且有一個 mutex 鎖 ..

詳細的可以參考: http://www.javaeye.com/topic/124788