Gymterview
junior

Какая разница между fail-fast и fail-safe

Fail-fast итераторы немедленно выбрасывают ConcurrentModificationException при обнаружении модификации коллекции, тогда как fail-safe итераторы работают с копией или снимком данных и никогда не выбрасывают это исключение.

Характеристика fail-fast fail-safe
Исключение при модификации ConcurrentModificationException Нет
Работает с Оригинальной коллекцией Копией / снимком
Отражает изменения Нет (прерывается) Не обязательно
Потребление памяти Низкое Выше (копия данных)
Примеры ArrayList, HashMap CopyOnWriteArrayList, ConcurrentHashMap

Fail-safe итераторы из пакета java.util.concurrent на самом деле не копируют всю коллекцию целиком (это было бы слишком дорого). Например, итератор ConcurrentHashMap работает с сегментами таблицы и допускает слабую согласованность (weakly consistent) — он может не отражать последние модификации, но никогда не выбросит исключение.

На собеседовании: используйте таблицу сравнения. Уточните, что термин fail-safe не совсем корректен — в документации JDK используется weakly consistent.