Dlaczego ArrayList nie rzuca wyjątku ConcurrentModificationException po zmodyfikowaniu z wielu wątków?

ConcurrentModificationException: wyjątek ten może zostać wygenerowany przez metody, które wykryły współbieżną modyfikację obiektu, gdy taka modyfikacja jest niedozwolona.

Powyżej jest definicja ConcurrentModificationException z javadoc.

Próbuję przetestować poniższy kod:

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();
}

Kod jest prosty. 10 wątków usuwa element z obiektu arraylistycznego. Jest pewne, że wiele wątków ma dostęp do jednego obiektu. Ale działa dobrze. Nie ma wyjątku. Czemu?

questionAnswers(5)

yourAnswerToTheQuestion