Gymterview
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 подход.