Вопрос проверяет понимание причин ConcurrentModificationException вне многопоточности.
Да, это исключение может возникать в одном потоке при изменении коллекции во время итерации (например, через for-each).
Причины в однопоточном коде:
Изменение коллекции в цикле:
List<String> list = new ArrayList<>(List.of("a", "b"));
for (String s : list) {
list.remove(s); // Выбросит ConcurrentModificationException
}Использование итератора:
Решение — явный Iterator с remove():
Iterator<String> it = list.iterator();
while (it.hasNext()) {
it.next();
it.remove(); // Безопасно
}Когда возникает:
При любом изменении коллекции (добавление/удаление) во время итерации.