Por que o ArrayList não lança ConcurrentModificationException quando modificado de vários threads?
ConcurrentModificationException: essa exceção pode ser lançada por métodos que detectaram a modificação simultânea de um objeto quando tal modificação não é permitida.
Acima está a definição ConcurrentModificationException do javadoc.
Então eu tento testar abaixo o código:
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();
}
O código é simples. 10 segmentos removem o elemento do objeto arraylist. É certo que vários threads acessam um objeto. Mas tudo corre bem. Nenhuma exceção é lançada. Por quê?