ExpertiDict

Java · Intermediário · Inglês · Técnico

ConcurrentModificationException

/kənˈkʌrənt ˌmɑdɪfɪˈkeɪʃən ɪkˈsɛpʃən/substantivo

Exceção lançada quando uma coleção é alterada durante uma iteração que não esperava a mudança, como remover dentro de um for-each. Os iteradores são fail-fast.

Onde usar

Aparece ao remover itens dentro de um for-each; a correção é usar iterator.remove() ou removeIf.

Em código

var l = new ArrayList<>(List.of(1, 2, 3));
for (var n : l) {
  if (n == 1) l.remove(n); // lança CME
}
l.removeIf(n -> n == 1); // forma correta

Exemplos

Removing inside the for-each throws a ConcurrentModificationException.

Remover dentro do for-each lança uma ConcurrentModificationException.

Use removeIf instead of removing in a loop.

Use removeIf em vez de remover dentro de um laço.

Cuidado

A exceção é só um auxílio para achar bugs, não garantia contra race conditions; coleções concorrentes se comportam de outro jeito.

Sinônimos

CME

Veja também

Todos os termos de Java