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.