Fail rapid și Fail Safe Iterators în Java: Care este diferența?



Acest articol despre „Iteratoare rapide și fără siguranță” vă va ajuta să comparați în detaliu aceste două Iteratoare cu exemple relevante.

acceptă două tipuri de iteratori, primul este un eșec rapid și al doilea este sigur. Acestea joacă un rol vital atunci când vine vorba de gestionarea excepțiilor în Java. În acest articol despre „Iteratoare rapide și nereușite”, vom analiza funcționarea celor două iteratoare, precum și diferența esențială dintre ele.

Următoarele sunt indicațiile care trebuie discutate în acest articol:





cum se scrie alertă în javascript

Înainte de a intra într-o explicație detaliată, să ne familiarizăm cu conceptul de modificare concurentă.

Modificare concurentă

Când un singur fir (sau mai multe fire), repetă o colecție, poate modifica structura colecției, fie prin adăugarea sau ștergerea elementului din colecție, fie prin actualizarea valorii elementului într-o anumită poziție. Acest proces este cunoscut sub numele de modificare concurentă.



Să aruncăm o privire rapidă asupra celor două sisteme care se referă la subiectul de mai sus, înainte de a intra în detaliile aceluiași,

Fail Fast Sysetm:

Un sistem este etichetat ca un sistem de eșec rapid, dacă se oprește imediat după apariția unei erori. Operațiile sunt întrerupte instantaneu și eșecurile sau erorile sunt expuse.

Sistem Fail Safe:

Un sistem este etichetat ca fiind un sistem de siguranță la eroare, dacă continuă să funcționeze chiar și după ce a apărut o eroare sau o eroare. Nu întrerupe o operație și ascund erorile în loc să le expună.



Iteratorii din java ne permit să traversăm obiectele Colecției. Iteratorii returnați de colecție sunt ori eșuează rapid sau sunt în siguranță.

Fail Fast Iterator

Eroarea rapidă a iteratorilor în Java interzice orice tip de modificare structurală a unei colecții în timp ce itera pe aceasta. Modificarea structurală include adăugarea, eliminarea sau actualizarea oricărui element din colecție în timp ce iterați peste aceasta. Iteratorul aruncă o excepție ConcurrentModificationException, dacă o colecție este modificată structural în timpul procesului de iterație.

Cu toate acestea, trebuie remarcat faptul că, dacă un element este eliminat folosind metoda proprie a iteratorilor, adică metoda remove (), nu se aruncă nicio excepție. Este un proces complet sigur. asigura-te ca ai java instalat pe sistemul dvs.

Exemplu de Iterator Fail Fast:

import java.util.HashMap import java.util.Iterator import java.util.Map public class FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // adăugarea unui element la Harta // excepția va fi aruncată în următorul apel // din metoda next (). monthIndex.put ('4', 'April')}}}

Ieșire:

Excepție în firul „principal” java.util.ConcurrentModificationException

la java.util.HashMap $ HashIterator.nextEntry (sursă necunoscută)

Acum, haideți să mergem mai departe și să aruncăm o privire la Iterator sigur

Iterator sigur

Spre deosebire de iteratorii Fail Fast, iteratorii Fail Safe nu fac excepții dacă colecția este modificată în timpul procesului de iterație. Acest lucru se datorează faptului că iterează pe clona colecției, în loc de colecția propriu-zisă. Modificările structurale efectuate asupra colecției efective trec neobservate de ele.

Cu toate acestea, trebuie remarcat faptul că nu există un astfel de iterator cu siguranță Fail Safe. Ar fi potrivit să o denumim slabă. Aceasta înseamnă pur și simplu asta dacă o colecție este modificată în timpul procesului de iterație, ceea ce vede Iteratorul este slab garantat. Acest comportament diferă pentru diferite colecții și este documentat în Javadocs.

Exemplu de Iterator Fail Safe:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'Martie') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( „4”, „aprilie”)}}}

Ieșire:

  • ianuarie
  • februarie
  • Martie

În cele din urmă, în acest articol vom compara acești iteratori,

Diferențe: Iterator Fail Fast și Fail Safe

Prezentate mai jos sunt diferențele esențiale dintre cei doi iteratori:

Parametrii Fail Fast Iterator Iterator sigur
Aruncați excepția Modificare simultană

Da, aruncă CocurrentModificationExcepti-on dacă o colecție este modificată în timp ce iterează peste ea.

Nu, nu fac nicio excepție dacă o colecție este modificată în timp ce iterați peste ea.

Clonați colecția

Nu, ei folosesc colecția originală pentru a traversa elementele.

cum să ridici ceva la o putere în Java

Da, folosesc copia colecției originale pentru a traversa.

Memorie Overhead

Nu, nu necesită memorie suplimentară.

Da, necesită memorie suplimentară pentru a clona colecția.

Exemple

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Acești iteratori sunt unici și foarte necesari în limbajul versatil al java. Deși eșecul are un inel reconfortant, iteratorul de eșec rapid se dovedește a fi robust.

Acest lucru duce la sfârșitul acestui articol. în cazul în care doriți să aflați mai multe, consultați de Edureka. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru a vă oferi un început avansat în programarea Java și pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate Java, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui blog „Fail Fast vs Fail Safe” și vă vom contacta cât mai curând posibil.