Java Core trainee
Что такое ConcurrentModificationException?
Ответ
Бросается итератором в fail-fast режиме, если коллекция изменилась во время итерации не через сам итератор. Реализуется через счётчик modCount коллекции и expectedModCount итератора: если при next() они разъезжаются — исключение. Срабатывает и в одном потоке, это рантайм-проверка, а не про многопоточность.
Разбор: ConcurrentModificationException — это fail-fast механизм одного итератора в одном потоке: при создании итератор запоминает expectedModCount, а при next()/remove() сверяет его с актуальным modCount коллекции. Несмотря на слово Concurrent в названии, исключение не про многопоточность и не гарантируется при ней; оно срабатывает и в одном потоке при структурном изменении коллекции мимо итератора. Это рантайм-проверка, а не работа компилятора, и не реакция на immutable-коллекции.
Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.