Iterator
. Они определяют, как поведет себя итератор при изменении перебираемой последовательности.Fail-fast – «быстрый» итератор. Когда после его создания коллекция как-либо изменилась, он падает с ошибкой без лишних разбирательств. Так работает итератор класса
ArrayList
, при изменении он выбрасывает ConcurrentModificationException
. Рекомендуется не основывать логику программы на fail-fast отказах, и использовать их только как признак ошибки реализации.Fail-safe – «умный» итератор. Обычно плата за отказоустойчивость – возможная неконсистентность данных («слабая консистентность»). Итератор класса
ConcurrentHashMap
работает с копией данных, он не выбросит исключение при изменении коллекции, но может не увидеть часть свежих изменений. Плата за отсутствие ошибок других fail-safe итераторов может отличаться, детали всегда можно найти в документации коллекций.