Sobes.tech
Junior — Middle

Aké metódy možno použiť na zabránenie výnimky ConcurrentModificationException pri práci s kolekciami v prostredí s viacerými vláknami?

sobes.tech AI

Odpoveď od AI

Aby ste predišli výnimke ConcurrentModificationException pri práci s kolekciami v prostredí s viacerými vláknami, môžete použiť nasledujúce metódy:

  • Používajte vlákno bezpečné kolekcie z balíka java.util.concurrent, napríklad ConcurrentHashMap, CopyOnWriteArrayList.
  • Ručne synchronizujte prístup ku kolekcii pomocou blokov synchronized alebo iných synchronizačných mechanizmov.
  • Používajte iterátory, ktoré podporujú bezpečné modifikácie, napríklad ListIterator pre zoznamy.
  • Vytvárajte kópie kolekcií na iteráciu (napríklad cez new ArrayList<>(pôvodnýZoznam)), aby ste zabránili zmenám pôvodnej kolekcie počas prechádzania.

Príklad použitia CopyOnWriteArrayList:

CopyOnWriteArrayList<String> zoznam = new CopyOnWriteArrayList<>();
zoznam.add("item1");
for (String item : zoznam) {
    zoznam.add("item2"); // nezpôsobí výnimku ConcurrentModificationException
}