Sobes.tech
Middle — Middle+

Kādi metodes un pieejas tiek izmantotas, lai novērstu izņēmuma ConcurrentModificationException rašanos, strādājot ar kolekcijām daudzvītņu režīmā?

sobes.tech AI

Atbilde no AI

Исключение ConcurrentModificationException возникает, когда коллекция изменяется во время итерации по ней в одном потоке, а в другом происходит модификация.

Для предотвращения этого используются следующие методы:

  • Использование потокобезопасных коллекций из java.util.concurrent, например, CopyOnWriteArrayList, ConcurrentHashMap. Эти коллекции позволяют безопасно изменять и читать данные из разных потоков.

  • Синхронизация доступа к коллекции. Можно использовать synchronized-блоки или методы, чтобы гарантировать, что модификация и итерация не пересекаются.

  • Клонирование коллекции перед итерацией. Итерация происходит по копии, что исключает ConcurrentModificationException.

  • Использование итераторов с поддержкой модификаций (например, ListIterator), но при этом избегать структурных изменений коллекции вне итератора.

Пример с CopyOnWriteArrayList:

CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("one");
list.add("two");

for (String item : list) {
    // Можно безопасно модифицировать list внутри цикла
    list.add("three");
}

Таким образом, выбор подхода зависит от требований к производительности и характеру операций с коллекцией.