Mislykkes raskt og mislykkes sikre ikteratorer i Java: Hva er forskjellen?



Denne artikkelen om 'Fail Fast And Fail Safe Iterators' vil hjelpe deg med å sammenligne disse to Iteratorene i detalj med relevante eksempler.

støtte to typer iteratorer, den første er feil raskt og den andre er feil sikker. Disse spiller en viktig rolle når det gjelder unntakshåndtering i Java. I denne artikkelen om ‘Fail Fast And Fail Safe Iterators’ vil vi analysere virkningen til de to iteratorene, så vel som den vesentlige forskjellen mellom dem.

Følgende er tipsene som skal diskuteres i denne artikkelen:





Før vi går inn i en detaljert forklaring, kan vi gjøre oss kjent med begrepet Concurrent Modification.

Samtidig modifisering

Når en enkelt tråd (eller flere tråder) går over en samling, kan den endre strukturen til samlingen, enten ved å legge til eller slette elementet i samlingen, eller ved å oppdatere elementets verdi på en bestemt posisjon. Denne prosessen er kjent som samtidig modifikasjon.



La oss raskt se på de to systemene som gjelder emnet ovenfor, før vi går inn i detaljene om det samme,

Fail Fast Sysetm:

Et system er merket som et feil-raskt system, hvis det slås av umiddelbart etter at en feil har oppstått. Operasjonene avbrytes øyeblikkelig, og feilene eller feilene blir avslørt.

Feilsikkert system:

Et system er merket som et feilsikkert system, hvis de fortsetter å fungere selv etter at en feil eller en feil har oppstått. De avbryter ikke en operasjon og skjuler feilene i stedet for å utsette dem.



t sql datatype

Iteratorer i java tillater oss å krysse over samlingsobjektene. Iteratorene som returneres av samlingen, feiler enten raskt eller feiler trygge.

Mislykkes raskt

Mislykkede raske iteratorer i Java tillater ikke alle typer strukturendringer i en samling mens de gjentas over den. Strukturell modifikasjon inkluderer å legge til, fjerne eller oppdatere ethvert element i samlingen mens det gjentas over det. Iteratoren kaster et ConcurrentModificationException, hvis en samling er strukturelt modifisert under iterasjonsprosessen.

Det må imidlertid bemerkes at hvis et element fjernes ved hjelp av iteratorens egen metode, dvs. fjern () -metoden, kastes det ikke noe unntak. Det er en helt trygg prosess. sørg for at du har java installert på systemet ditt

Eksempel på Fail Fast Iterator:

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 () mens (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // legge til et element i Map // unntak blir kastet ved neste samtale // av neste () -metoden. monthIndex.put ('4', 'April')}}}

Produksjon:

Unntak i tråden 'hoved' java.util.ConcurrentModificationException

på java.util.HashMap $ HashIterator.nextEntry (Ukjent kilde)

La oss nå gå videre og se på Fail Safe Iterator,

Feilsikker Iterator

I motsetning til Fail Fast iterators, gir Fail Safe iterators ingen unntak hvis samlingen endres under iterasjonsprosessen. Dette skyldes at de gjentar seg på klon av samlingen, i stedet for selve samlingen. De strukturelle modifikasjonene som er gjort på selve samlingen, blir ubemerket av dem.

Imidlertid bør det bemerkes at det ikke er noe som heter en virkelig Fail Safe Iterator. Det ville være hensiktsmessig å betegne det som svakt konsistent. Dette betyr ganske enkelt det hvis en samling er modifisert under prosessen med iterasjon, det Iteratoren ser er svakt garantert. Denne oppførselen er forskjellig for forskjellige samlinger og er dokumentert i Javadocs.

Eksempel på feilsikker Iterator:

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

Produksjon:

  • januar
  • februar
  • mars

Til slutt i denne artikkelen vil vi sammenligne disse iteratorene,

Forskjeller: Fail Fast og Fail Safe Iterator

Nedenfor er de viktigste forskjellene mellom de to iteratorene:

php analyserer streng for å matche
Parametere Mislykkes raskt Feilsikker Iterator
Kast ConcurrentModification Unntak

Ja, de kaster CocurrentModificationExcepti-on hvis en samling modifiseres mens den gjentas over den.

Nei, de kaster ikke noe unntak hvis en samling blir modifisert mens den gjentas over den.

Klon samlingen

Nei, de bruker original samling for å krysse over elementene.

Ja, de bruker kopien av den originale samlingen til å krysse.

Minneoverhead

Nei, de krever ikke ekstra minne.

Ja, de krever ekstra minne for å klone samlingen.

Eksempler

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Disse iteratorene er både unike og sårt tiltrengte i det allsidige språket til Java. Selv om fail safe har en trøstende ring, viser fail-iteratoren seg å være robust.

tett kobling vs løs kobling

Dette fører til slutten av denne artikkelen. i tilfelle du ønsker å lære mer, så sjekk ut av Edureka. Edurekas Java J2EE- og SOA-opplæring og sertifiseringskurs er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne 'Fail Fast vs Fail Safe' -bloggen, så kommer vi tilbake til deg så snart som mulig.