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íkladConcurrentHashMap,CopyOnWriteArrayList. - Ručne synchronizujte prístup ku kolekcii pomocou blokov
synchronizedalebo iných synchronizačných mechanizmov. - Používajte iterátory, ktoré podporujú bezpečné modifikácie, napríklad
ListIteratorpre 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
}