Fail Fast and Fail Safe Iterators u Javi: Koja je razlika?



Ovaj članak o 'Fail Fast and Fail Safe Iterators' pomoći će vam detaljno usporediti ova dva iteratora s relevantnim primjerima.

podržavaju dvije vrste iteratora, prvi je brzi, a drugi siguran. Oni igraju vitalnu ulogu kada je riječ o rukovanju iznimkama na Javi. U ovom ćemo članku o 'Fail Fast And Fail Safe Iterators' analizirati ćemo rad dvaju iteratora kao i bitnu razliku između njih.

Slijede upute o kojima će se raspravljati u ovom članku:





Prije detaljnog objašnjenja, upoznajmo se s konceptom istodobne modifikacije.

Istodobna izmjena

Kada se pojedinačna nit (ili više niti) ponavlja kroz zbirku, ona može promijeniti strukturu zbirke, dodavanjem ili brisanjem elementa u zbirci ili ažuriranjem vrijednosti elementa na određenom položaju. Taj je postupak poznat kao istodobna modifikacija.



Pogledajmo brzo dva sustava koja se tiču ​​gornje teme, prije nego što uđemo u pojedinosti istog,

Fail Fast Sysetm:

Sustav je označen kao sustav s brzom kvarom ako se isključi odmah nakon pojave pogreške. Operacije se trenutno prekidaju i otkrivaju se kvarovi ili pogreške.

Sigurnosni sustav:

Sustav je označen kao sustav koji je siguran od kvarova, ako nastavi raditi čak i nakon što je došlo do kvara ili pogreške. Ne prekidaju operaciju i skrivaju pogreške umjesto da ih izlažu.



što je primjer u javi

Iteratori u javi omogućuju nam prelazak preko predmeta Zbirke. Iteratori koje vraća Zbirka ili brzo propadaju ili su sigurni u svojoj prirodi.

Fail Fast Iterator

Neuspjeli brzi iteratori u Javi onemogućuju bilo koju strukturnu modifikaciju zbirke dok se njome prevlači. Strukturna modifikacija uključuje dodavanje, uklanjanje ili ažuriranje bilo kojeg elementa u zbirci dok se njime prevlači. Iterator baca ConcurrentModificationException, ako je zbirka strukturno modificirana tijekom procesa iteracije.

Međutim, mora se napomenuti da ako se stavka ukloni korištenjem vlastite metode iteratora, tj. Metodom remove (), neće se izuzeti iznimka. To je potpuno siguran postupak. uvjerite se da imate instalirana java na vašem sustavu

Primjer Fail Fast Iteratora:

import java.util.HashMap import java.util.Iterator import java.util.Map javna klasa FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' Veljača ') monthIndex.put (' 3 ',' Ožujak ') Iterator iterator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // dodavanje elementa u Map // iznimka bit će bačeno na sljedeći poziv // metode next (). monthIndex.put ('4', 'April')}}}

Izlaz:

Iznimka u niti 'main' java.util.ConcurrentModificationException

na java.util.HashMap $ HashIterator.nextEntry (nepoznati izvor)

Ajmo sada pogledati Fail Safe Iterator,

Neuspjeli sigurni pokretač

Za razliku od Fail Fast iteratora, Fail Safe iteratori ne izuzimaju iznimke ako je zbirka izmijenjena tijekom postupka iteracije. To je zbog činjenice da se ponavljaju na klonu zbirke, umjesto na stvarnoj zbirci. Strukturne preinake izvršene na stvarnoj zbirci ostaju kod njih nezapažene.

Međutim, valja primijetiti da ne postoji stvar kao što je doista Fail Safe Iterator. Bilo bi prikladno nazvati ga Slabo dosljednim. To jednostavno znači to ako zbirka se mijenja tijekom postupka iteracije, ono što Iterator vidi slabo je zajamčeno. Ovo se ponašanje razlikuje za različite zbirke i dokumentirano je u Javadocsu.

Primjer neuspješnog iteratora:

javna klasa FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'Ožujak') Iterator iterator = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'Travanj')}}}

Izlaz:

  • Siječnja
  • veljača
  • ožujak

Napokon, u ovom bismo članku uspoređivali ove iteratere,

Razlike: Fail Fast i Fail Safe Iterator

Dolje su date osnovne razlike između dva iteratora:

Parametri Fail Fast Iterator Neuspjeli sigurni pokretač
Bacite iznimku ConcurrentModification

Da, bacaju CocurrentModificationExcepti-on ako je kolekcija izmijenjena dok se nad njom prevlači.

Ne, oni ne izuzimaju nikakvu iznimku ako je zbirka izmijenjena dok se nad njom prevlači.

Klonirajte kolekciju

Ne, oni koriste originalnu kolekciju za prelazak elemenata.

Da, za preslikavanje koriste kopiju izvorne zbirke.

Memorija iznad glave

Ne, ne trebaju dodatnu memoriju.

Da, potrebna im je dodatna memorija za kloniranje kolekcije.

Primjeri

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Ovi su iteratori jedinstveni i prijeko potrebni u svestranom jeziku Java. Iako sigurnosni kvar ima utješni prsten, iterator brzog kvara pokazuje se robusnim.

Ovo dovodi do kraja ovog članka. u slučaju da želite saznati više, pogledajte od Edureke. Edurekin tečaj za obuku i certifikaciju Java J2EE i SOA osmišljen je tako da vam pruži prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Spring.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga 'Fail Fast vs Fail Safe' i javit ćemo vam se u najkraćem mogućem roku.