Что такое fail-fast поведение
Fail-fast поведение — это стратегия немедленного выброса исключения при обнаружении конкурентной модификации коллекции, вместо продолжения работы с потенциально некорректными данными.
В JCF fail-fast итераторы выбрасывают ConcurrentModificationException, если после создания итератора коллекция была изменена напрямую (не через методы самого итератора). Механизм реализован через счетчик модификаций (modCount):
- при каждом структурном изменении коллекции (add, remove) значение modCount увеличивается;
- при создании итератора текущий modCount сохраняется в поле expectedModCount;
- при каждом вызове next() или remove() итератор сравнивает expectedModCount с текущим modCount коллекции;
- если значения расходятся, выбрасывается ConcurrentModificationException.
Fail-fast поведение не гарантировано в многопоточной среде — оно работает на основе best-effort проверки. Для надежной работы с коллекциями из нескольких потоков следует использовать concurrent-коллекции из пакета java.util.concurrent.
На собеседовании: объясните механизм через modCount и expectedModCount. Подчеркните, что fail-fast — это best-effort, а не строгая гарантия.