Sobes.tech
Назад к вопросам
Junior — Middle
61

Какие ситуации могут привести к возникновению исключения ConcurrentModificationException в однопоточной среде?

Компании, где спрашивали
Т-БанкТ-Банк

Ответ от нейросети

sobes.tech AI

Исключение ConcurrentModificationException в Java обычно возникает при одновременном изменении коллекции во время её итерации. В однопоточной среде это может случиться, если во время обхода коллекции с помощью итератора вы изменяете коллекцию напрямую (например, вызываете методы add(), remove() на самой коллекции, а не через итератор).

Пример:

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
for (String s : list) {
    if (s.equals("b")) {
        list.remove(s); // Прямое изменение коллекции во время итерации
    }
}
// Это вызовет ConcurrentModificationException

Правильный способ удаления элементов во время итерации — использовать методы итератора:

Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String s = iterator.next();
    if (s.equals("b")) {
        iterator.remove(); // Безопасное удаление
    }
}