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.