junior
Приведите примеры итераторов, реализующих поведение fail-safe
Итераторы с fail-safe (weakly consistent) поведением предоставляют коллекции из пакета java.util.concurrent. Основные примеры:
- Итератор
CopyOnWriteArrayList— работает со снимком массива, созданным на момент создания итератора. Любые модификации оригинальной коллекции создают новую копию массива и не влияют на итерацию. - Итератор
CopyOnWriteArraySet— аналогично, основан на CopyOnWriteArrayList. - Итератор представления
keySet()коллекцииConcurrentHashMap— работает с weakly consistent семантикой: может отражать часть изменений, произведенных после создания итератора.
На практике выбор между fail-fast и fail-safe зависит от требований: если итерация происходит в многопоточной среде, используют concurrent-коллекции. Если в однопоточном коде — стандартные коллекции с fail-fast итераторами.
На собеседовании: назовите CopyOnWriteArrayList и ConcurrentHashMap как два основных примера. Объясните разницу: первый копирует весь массив, второй использует weakly consistent подход.