Sobes.tech
Junior — Middle

Quali situazioni possono portare a un'eccezione ConcurrentModificationException in un ambiente a thread singolo?

sobes.tech AI

Risposta dell'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(); // Безопасное удаление
    }
}