"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar `ConcurrentModificationException` ao usar métodos sincronizados?

Como evitar `ConcurrentModificationException` ao usar métodos sincronizados?

Publicado em 2024-11-24
Navegar:212

How to Avoid `ConcurrentModificationException` When Using Synchronized Methods?

Evitando ConcurrentModificationException ao usar métodos sincronizados

O erro ConcurrentModificationException normalmente ocorre devido a modificações feitas na coleção que um iterador está iterando dentro do loop corpo. Apesar da presença de uma palavra-chave sincronizada na declaração do método, esta exceção ainda pode ser encontrada.

No trecho de código fornecido:

public synchronized X getAnotherX(){ 
  if(iterator.hasNext()){
   X b = iterator.next();
   String name = b.getInputFileName();
  ...
   return b;
  }
  else{return null;}
 }

O erro provavelmente está sendo gerado porque um thread externo está modificando a coleção subjacente enquanto o iterador está iterando sobre ela. Essa modificação pode incluir a adição ou remoção de elementos.

A solução para esse problema é garantir que nenhum outro thread possa modificar a coleção durante a iteração. Isso pode ser conseguido criando uma cópia da coleção antes de iterá-la. No entanto, se isso não for viável, o iterador deverá ser obtido de maneira segura para threads. Isso pode ser feito usando o método Collections.synchronizedList() ou criando um wrapper de sincronização personalizado para a coleção.

Ao seguir essas etapas, você pode garantir que ConcurrentModificationException não seja encontrada e que a coleção seja iterada com segurança.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3