Лучший способ, вероятно, посмотреть исходный код для каждого класса, реализованный реализацией Open JDK для каждого класса; таким образом, вы можете получить ответ прямо из первых уст :-)
Помимо этого, по сути, «быстрый отказ» в этом смысле означает, что итератор над HashMap выдаст исключение, если обнаружит, что другой поток изменил целевой HashMap — если вы посмотрите в источнике для HashMap, вы увидите, что это делается путем простой проверки счетчика количества ожидаемых модификаций. Если количество модификаций отличается от ожидаемого Итератором, это означает, что кто-то еще вошел с момента последней проверки и возился с HashMap, и поэтому Итератор выдает ConcurrentModificationException.
«Неотказоустойчивый» итератор не удосужится проверить и с радостью продолжит свое дело в базовой структуре данных. Таким образом, вы получаете некоторую гибкость (вероятно, сомнительную гибкость в данном случае) в обмен на то, что позже вы, возможно, столкнетесь с ошибками; то есть попытка доступа к значению, которого больше нет.
Как и во всех стратегиях fail-fast, идея заключается в том, что чем раньше будет обнаружена ошибка, тем легче его восстановить или отладить.
person
Paul Wostenberg
schedule
05.01.2012