Java 1.5の最新のforループを使用してコレクションを反復処理し、一部の要素を削除すると、concurrentmodifuicationexceptionがスローされます。
しかし、次のコードを実行しても、例外はスローされません。
public static void main(String a []){
Set<String> strs = new HashSet<String>();
strs.add("one");
strs.add("two");
strs.add("three);
for(String str : strs){
if(str.equalsIgnoreCase("two"){
strs.remove(str);
}
}
}
上記のコードはConcurrentModificationExceptionをスローしません。しかし、Webアプリケーションサービスメソッドでそのようなforループを使用すると、常に1つスローされます。なんで?サービスメソッドで実行されているときにコレクションにアクセスしているスレッドが2つもないと確信しています。では、コレクションが一方にスローされ、もう一方にスローされない2つのシナリオで違いが生じる原因は何でしょうか。