La mejor manera es probablemente mirar la fuente para cada clase implementada por la implementación Open JDK para cada clase; de esa manera, puede obtener su respuesta directamente de la boca del caballo, como si fuera :-)
Dejando eso de lado, esencialmente, "fail-fast" en este sentido significa que un Iterador sobre un HashMap lanzará una excepción si detecta que otro subproceso ha modificado el HashMap específico - si busca en el código fuente de HashMap, verá que esto se hace simplemente marcando un contador para la cantidad de modificaciones esperadas. Si el recuento de modificaciones es diferente de lo esperado por el iterador, eso significa que alguien más ha entrado desde el último control y ha manipulado el HashMap, por lo que el iterador lanza un ConcurrentModificationException.
Un iterador "no a prueba de fallas" no se molestaría en comprobarlo, y felizmente seguiría su negocio en la estructura de datos subyacente. Por lo tanto, obtienes cierta flexibilidad (probablemente dudosa flexibilidad en este caso) a cambio de posibles errores posteriores; es decir, intentar acceder a un valor que ya no está presente.
Como con todas las estrategias fail-fast, la idea es que cuanto más temprano se detecta un error, más fácil es recuperarlo o depurarlo.
Los iteradores de Hastable son rápidos. Sus enumeraciones no son. –
¡Tienes razón! ¡Gracias! – evanwong