Junior — Middle
O que significa o aparecimento de uma exceção ConcurrentModificationException em Java, e em que situações ela pode ser lançada?
sobes.tech IA
Resposta da IA
A exceção ConcurrentModificationException em Java ocorre quando, durante a iteração sobre uma coleção, ocorre uma alteração estrutural na coleção (por exemplo, adicionar ou remover elementos) que não é feita através do iterador, mas diretamente pelos métodos da coleção. Este mecanismo fail-fast alerta para alterações potencialmente perigosas que podem levar a um comportamento incorreto do iterador.
Situações típicas em que essa exceção é lançada:
- Iterar sobre um
ArrayListusandoIterator, e dentro do ciclo chamarlist.remove()diretamente, em vez deiterator.remove(). - Modificar a coleção a partir de outro thread durante a iteração sem sincronização.
Exemplo:
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
for (String s : list) {
if (s.equals("b")) {
list.remove(s); // lançará ConcurrentModificationException
}
}
Forma correta de remover durante a iteração:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (s.equals("b")) {
iterator.remove(); // seguro
}
}