Iterator: Fail Fast Bedeutung?

babuschka

Top Contributor
Hallo Community,
könnte mir vielleicht einer kurz erklären, was Fail Fast in Iterator bedeutet? Habe gegoogelt aber leider nichts gescheites gefunden. Vielen Dank im Voraus
 

eRaaaa

Top Contributor
Wenn ein Thread eine Collection verändert (mittels remove oder add o.ä.) während ein anderer Thread (oder auch der selbe) über diese Collection iteriert, und dieser daraufhin einen Fehler /Exception wirft,nennt man diesen fail fast Iterator. Typischerweise wird dann eine ConcurrentModificationException geworfen:
(in der doc dieser Exception stehen auch einige Zeilen dazu)
ConcurrentModificationException (Java Platform SE 6)

Deshalb sollte man auch immer die Methoden des Iterators benutzen wenn man während des iterieren was verändern will.
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Um das nochmal zu betonen: Das "fail fast" bedeutet, dass es sofort FAILt, wenn eine "Concurrent Modification" festgestellt wurde. Wenn man z.B. in einem Thread einen Iterator durch eine Liste mit Elementen A,B,C,D,E laufen läßt...
Iterator bei A
Iterator bei B
Iterator bei C
...
Und dann ein anderer Thread das Element A löscht, dann KÖNNTE das dem ersten Iterator eigentlich egal sein - er könnte einfach weiterlaufen...:
Iterator bei D
Iterator bei E

Weil das aber Implementierungsabhängig ist, und in anderen Fällen zu Problemen führen könnte (und sicher auch würde), wird "fail fast" verwendet, und der erste Iterator wird beim Versuch, von C nach D zu laufen eine ConcurrentModificationException werfen.

Nach dem Motto: Lieber früh bescheid sagen, dass irgendwas nicht stimmt, als "auf gut Glück" weiterzumachen, und vielleicht irgendeinen anderen (schwer nachvollziehbaren und/oder kaum reporoduzierbaren) Fehler zu verursachen.
 

Oben