FailSafe Feature - PullRequest
       5

FailSafe Feature

0 голосов
/ 13 февраля 2011

Прежде чем задать этот вопрос, я попытался понять (здесь, на SOF и на некоторых других сайтах) отказоустойчивую функцию. Я понимаю, что итераторы Java Collection являются быстрыми при сбое, что в основном означает, что они терпят неудачу изящно, как только базовая коллекция структурно модифицируется (даже одним и тем же потоком). Мой вопрос заключается в том, имеет ли отказоустойчивое свойство какое-либо отношение к функциям итераторов remove () или add ()? В моем понимании, потому что с помощью Iterators вы можете добавлять или удалять (безопасно) во время итерации по Коллекции, и вы не получите одновременное исключение (которое вы делаете без использования их функций удаления и добавления), так что это делает итераторы отказоустойчивыми. Или я совершенно неправильно понял?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Не совсем.В моем понимании отказоустойчивые итераторы работают с моментальными снимками данных и гарантируют согласованное представление представленной коллекции в тот момент, когда итератор был создан.(см. в этом блоге для более детальной обработки этого вопроса).Это свойство гарантируется итераторами CopyOnWriteArrayList.Его итераторы не поддерживают операции модификации коллекции, и его javadoc дополнительно разъясняет их поведение:

Этот массив никогда не изменяется в течение времени жизни итератора, поэтому вмешательство невозможно, и итератор гарантированно не генерирует исключение ConcurrentModificationException.Итератор не будет отражать добавления, удаления или изменения в списке с момента его создания.Операции изменения элементов на самих итераторах (удаление, установка и добавление) не поддерживаются.Эти методы генерируют исключение UnsupportedOperationException.

ОБНОВЛЕНИЕ:

Когда речь идет об отказоустойчивости и отказоустойчивости, важно отделить «отказ».В случае итератора существуют разные случаи и опасности.Что касается связанной статьи, я бы сказал, что там автор реализует отказоустойчивые и отказоустойчивые итерации , в первую очередь путем реализации итераторов.

Ошибка в этом случае может быть определена как одновременная модификация повторного набора.Когда коллекция модифицируется, то подходом к отказоустойчивости будет остановка итерации и информирование вызывающего абонента об изменившихся условиях (через CME или каким-либо другим способом).

Имея дело с одним и тем же сценарием использования и опасностью, мы можем двигаться дальше и думать о безаварийной итерации.Свойство отказоустойчивости означает, что итерация должна соответствовать своему контракту настолько долго, насколько это возможно (и авторы COWAS успешно копируют базовые данные).

0 голосов
/ 13 февраля 2011

Работа Iterator или ListIterator в базовой коллекции - это способ, который не делает недействительным этот итератор. Любая модификация с помощью любого другого итератора или самой коллекции делает его недействительным для некоторых коллекций. Некоторые коллекции предназначены для одновременного доступа и не имеют этого ограничения.

...