Unterstützt zwei Arten von Iteratoren: Der erste ist ausfallsicher und der zweite ausfallsicher. Diese spielen eine wichtige Rolle bei der Ausnahmebehandlung in Java. In diesem Artikel zu 'Fail Fast And Fail Safe Iterators' analysieren wir die Funktionsweise der beiden Iteratoren sowie den wesentlichen Unterschied zwischen ihnen.
Im Folgenden sind die Hinweise aufgeführt, die in diesem Artikel behandelt werden sollen:
wie man wait und notify in java benutzt
Bevor wir uns mit einer detaillierten Erklärung befassen, sollten wir uns mit dem Konzept der gleichzeitigen Änderung vertraut machen.
Gleichzeitige Änderung
Wenn ein einzelner Thread (oder mehrere Threads) über eine Sammlung iteriert, kann dies die Struktur der Sammlung ändern, indem entweder das Element in der Sammlung hinzugefügt oder gelöscht wird oder indem der Wert des Elements an einer bestimmten Position aktualisiert wird. Dieser Vorgang wird als gleichzeitige Änderung bezeichnet.
Lassen Sie uns einen kurzen Blick auf die beiden oben genannten Systeme werfen, bevor wir auf die Details desselben eingehen.
Fail Fast Sysetm:
Ein System wird als ausfallsicheres System bezeichnet, wenn es unmittelbar nach dem Auftreten eines Fehlers heruntergefahren wird. Die Vorgänge werden sofort abgebrochen und die Fehler oder Fehler werden aufgedeckt.
Ausfallsicheres System:
Ein System wird als ausfallsicheres System bezeichnet, wenn es auch nach einem Fehler oder einem Fehler weiter funktioniert. Sie brechen eine Operation nicht ab und verbergen die Fehler, anstatt sie aufzudecken.
Iteratoren in Java ermöglichen es uns, die Sammlungsobjekte zu durchlaufen. Die von der Sammlung zurückgegebenen Iteratoren sind entweder schnell oder ausfallsicher.
Fail Fast Iterator
Fehlerhafte schnelle Iteratoren in Java verbieten jede Art von struktureller Änderung an einer Sammlung, während sie darüber iteriert. Strukturelle Änderungen umfassen das Hinzufügen, Entfernen oder Aktualisieren von Elementen in der Sammlung, während diese durchlaufen werden. Der Iterator löst eine ConcurrentModificationException aus, wenn eine Sammlung während des Iterationsprozesses strukturell geändert wird.
Es muss jedoch beachtet werden, dass keine Ausnahme ausgelöst wird, wenn ein Element unter Verwendung der Iterator-eigenen Methode, d. H. Der remove () -Methode, entfernt wird. Es ist ein völlig sicherer Prozess. Stell sicher dass du hast Java installiert auf Ihrem System
Beispiel für einen Fail Fast Iterator:
import java.util.HashMap import java.util.Iterator import java.util.Map öffentliche Klasse FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'Januar ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // Das Hinzufügen eines Elements zur Map // Ausnahme wird beim nächsten Aufruf // der next () -Methode ausgelöst. monthIndex.put ('4', 'April')}}}
Ausgabe:
Ausnahme im Thread 'main' java.util.ConcurrentModificationException
at java.util.HashMap $ HashIterator.nextEntry (Unbekannte Quelle)
Lassen Sie uns nun einen Blick auf den Fail Safe Iterator werfen.
Fail Safe Iterator
Im Gegensatz zu Fail Fast-Iteratoren lösen Fail Safe-Iteratoren keine Ausnahmen aus, wenn die Sammlung während des Iterationsprozesses geändert wird. Dies liegt an der Tatsache, dass sie auf dem Klon der Sammlung anstelle der eigentlichen Sammlung iterieren. Die strukturellen Änderungen an der eigentlichen Sammlung bleiben für sie unbemerkt.
Es sollte jedoch beachtet werden, dass es keinen wirklich ausfallsicheren Iterator gibt. Es wäre angebracht, es als schwach konsistent zu bezeichnen. Das bedeutet einfach das wenn Eine Sammlung wird während des Iterationsprozesses geändert, was der Iterator sieht, ist schwach garantiert. Dieses Verhalten ist für verschiedene Sammlungen unterschiedlich und in Javadocs dokumentiert.
Beispiel für einen ausfallsicheren Iterator:
öffentliche Klasse FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'März') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'April')}}}
Ausgabe:
Kontroverse über künstliche Intelligenz Vor- und Nachteile
- Januar
- Februar
- März
Schließlich würden wir in diesem Artikel diese Iteratoren vergleichen,
Unterschiede: Fail Fast und Fail Safe Iterator
Nachstehend sind die wesentlichen Unterschiede zwischen den beiden Iteratoren aufgeführt:
Parameter | Fail Fast Iterator | Fail Safe Iterator |
ConcurrentModification-Ausnahme auslösen | Ja, sie werfen CocurrentModificationExcepti-on aus, wenn eine Sammlung geändert wird, während sie darüber iteriert. | Nein, sie lösen keine Ausnahme aus, wenn eine Sammlung beim Durchlaufen geändert wird. |
Klonen Sie die Sammlung | Nein, sie verwenden die Originalsammlung, um die Elemente zu durchlaufen. Was ist eine virtuelle Funktion Java | Ja, sie verwenden die Kopie der Originalsammlung zum Durchlaufen. |
Speicher-Overhead | Nein, sie benötigen keinen zusätzlichen Speicher. | Ja, sie benötigen zusätzlichen Speicher, um die Sammlung zu klonen. |
Beispiele | HashMap, Vector, ArrayList, HashSet | CopyOnWriteArrayList |
Diese Iteratoren sind einzigartig und werden in der vielseitigen Sprache Java dringend benötigt. Obwohl Fail Safe einen beruhigenden Klang hat, erweist sich der Fail Fast Iterator als robust.
Dies bringt zum Ende dieses Artikels. Wenn Sie mehr erfahren möchten, lesen Sie die von Edureka. Der Java J2EE- und SOA-Schulungs- und Zertifizierungskurs von Edureka soll Ihnen einen Vorsprung in die Java-Programmierung verschaffen und Sie sowohl für Kern- als auch für fortgeschrittene Java-Konzepte sowie für verschiedene Java-Frameworks wie Hibernate & Spring schulen.
Hast du eine Frage an uns? Bitte erwähnen Sie dies im Kommentarbereich dieses Blogs „Fail Fast vs Fail Safe“. Wir werden uns so schnell wie möglich bei Ihnen melden.