ConcurrentModificationException:この例外は、オブジェクトの同時変更が許可されていない場合に、そのような変更を検出したメソッドによってスローされる場合があります。
上記は、javadocからのConcurrentModificationException定義です。
だから私は以下のコードをテストしようとします:
final List<String> tickets = new ArrayList<String>(100000);
for (int i = 0; i < 100000; i++) {
tickets.add("ticket NO," + i);
}
for (int i = 0; i < 10; i++) {
Thread salethread = new Thread() {
public void run() {
while (tickets.size() > 0) {
tickets.remove(0);
System.out.println(Thread.currentThread().getId()+"Remove 0");
}
}
};
salethread.start();
}
コードは単純です。10スレッドで、arraylistオブジェクトから要素が削除されます。複数のスレッドが1つのオブジェクトにアクセスすることは確実です。しかし、それは問題なく動作します。例外はスローされません。なんで?