Il modo migliore è probabilmente esaminare l'origine per ogni classe implementata dall'implementazione Open JDK per ogni classe; in questo modo, puoi ottenere la risposta direttamente dalla bocca del cavallo :-)
A parte questo, in sostanza, "fail-fast" in questo senso significa che un Iterator su una HashMap genererà un'eccezione se rileva che un altro thread ha modificato la HashMap di destinazione: se si guarda nel sorgente per HashMap, si vedrà ciò facendo semplicemente controllando un contatore per il numero di modifiche previste. Se il conteggio delle modifiche è diverso dall'Iteratore previsto, significa che qualcun altro è entrato dall'ultimo controllo e ha incasinato la HashMap, quindi l'Iterator genera uno ConcurrentModificationException.
Un Iterator "non fail-fast" non si preoccuperebbe di controllare, e passerà felicemente al suo business nella struttura dati sottostante. Pertanto, si ottiene una certa flessibilità (probabilmente dubbia flessibilità in questo caso) in cambio di possibili errori successivi; ad esempio tentando di accedere a un valore che non è più presente.
Come per tutte le strategie fail-fast, l'idea è che prima viene rilevato un errore, più è facile il ripristino o il debug.
fonte
2012-01-05 22:57:00
Gli iteratori di Hastable sono veloci. Le sue enumerazioni non lo sono. –
Hai ragione! Grazie! – evanwong