Sobes.tech
Junior — Middle

Jakie metody można zastosować, aby uniknąć wyjątku ConcurrentModificationException podczas pracy z kolekcjami w środowisku wielowątkowym?

sobes.tech AI

Odpowiedź od AI

Aby uniknąć wyjątku ConcurrentModificationException podczas pracy z kolekcjami w środowisku wielowątkowym, można użyć następujących metod:

  • Używać bezpiecznych dla wątków kolekcji z pakietu java.util.concurrent, np. ConcurrentHashMap, CopyOnWriteArrayList.
  • Ręcznie synchronizować dostęp do kolekcji za pomocą bloków synchronized lub innych mechanizmów synchronizacji.
  • Używać iteratorów obsługujących bezpieczne modyfikacje, np. ListIterator dla list.
  • Tworzyć kopie kolekcji do iteracji (np. przez new ArrayList<>(oryginalnaLista)), aby uniknąć modyfikacji oryginalnej kolekcji podczas iteracji.

Przykład użycia CopyOnWriteArrayList:

CopyOnWriteArrayList<String> lista = new CopyOnWriteArrayList<>();
lista.add("item1");
for (String item : lista) {
    lista.add("item2"); // nie spowoduje ConcurrentModificationException
}