Почему итераторы быстро терпят неудачу и действительно ли они быстро терпят неудачу?
Итераторы в Java работают быстро. Если значения итератора изменяются во время итерации, генерируется исключение.
Это чисто для безопасности? Я уверен, что в некоторых случаях это не имеет большого значения, если значения меняются. Например, предположим, что вы отправляете некритические оповещения участникам в итераторе каждые 10 секунд. Зачем вас беспокоить, если содержимое меняется?
Кроме того, отказоустойчивая реализация просто проверяет счет. Это ошибочно, если другой поток добавляет и удаляет счетчик будет таким же, даже если содержимое итератора изменилось. Не было бы лучше использовать номер версии?
1 ответ
Отказоустойчивое поведение предназначено исключительно для облегчения отладки. Общее правило заключается в том, что если вы изменяете коллекцию во время итерации по ней с помощью других средств, кроме членов итератора, поведение итератора перестает быть предсказуемым. Это создаст исключение на основе максимальных усилий.
Таким образом, любой дорогостоящий метод отслеживания является плохой идеей.