Что такое отказобезопасные и отказоустойчивые итераторы в Java
Неуправляемые итераторы
Fail-Fast iterators, возвращенные большинством типов коллекций, не переносят каких-либо структурных изменений в коллекции, итерации по ней. В Java отказоустойчивый итератор выходит из строя, вызывая исключение ConcurrentModificationException. Структурные изменения означают добавление, удаление или обновление любого элемента из коллекции, в то время как один поток Итерирует по этой коллекции. быстрое выполнение выполняется путем сохранения количества модификаций, и если итерационный поток реализует изменение в модификации, подсчитывает его броски
Истребители с отказоустойчивостью
В отличие от отказоустойчивого итератора, отказобезопасный итератор не бросает никакого Исключения, если коллекция модифицируется структурно, в то время как один поток выполняет Итерацию над ним, потому что они работают с клоном Collection вместо оригинальной коллекции, и именно поэтому они называются отказоустойчивыми итератор. Таким образом, любые структурные изменения, сделанные в реальной коллекции, остаются незамеченными этими итераторами. Итератор CopyOnWriteArrayList является примером отказоустойчивого Iterator, итератор, написанный ConcurrentHashMap keySet, также является отказоустойчивым итератором и никогда не бросает ConcurrentModificationException в Java.