Java Core middle
ConcurrentModificationException: причина и решение?
Ответ
Модификация коллекции во время итерации не через итератор (fail-fast, в том числе в одном потоке — например, list.remove в for-each). modCount-счётчик: при следующем next() проверяется. Решения: Iterator.remove(), CopyOnWriteArrayList, ConcurrentHashMap, removeIf() (Java 8+).
Разбор: CME — это fail-fast реакция на структурную модификацию коллекции в обход итератора: итератор хранит ожидаемое значение modCount и сверяет его в next(). Исключение легко получить и в одном потоке (например, list.remove внутри for-each), поэтому решения — Iterator.remove(), removeIf(), CopyOnWriteArrayList или ConcurrentHashMap, а не просто внешняя синхронизация или увеличение capacity.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.