Kiire ebaõnnestumine ja Java ebaõnnestumiste kindlustamine: mis on erinevus?



See artikkel „Kiire ja ebaõnnestunud iteraatorid” aitab teil neid kahte iteraatorit üksikasjalikult võrrelda asjakohaste näidetega.

toetada kahte tüüpi iteraatoreid, esimene on ebaõnnestunud kiiresti ja teine ​​on ebaõnnestunud. Neil on Java-s erandite käsitlemisel oluline roll. Selles artiklis „Fail Fast and Fail Safe Iterators” käsitleme nii kahe iteraatori tööd kui ka nende olulist erinevust.

Selles artiklis käsitletakse järgmisi näpunäiteid:





Enne üksikasjaliku selgituse leidmist tutvuge samaaegse muutmise mõistega.

Samaaegne muutmine

Kui üks lõim (või mitu lõime) kordub kogu üle, võib see muuta kogu struktuuri, lisades või kustutades kogumis oleva elemendi või värskendades elemendi väärtust kindlas asukohas. Seda protsessi nimetatakse samaaegseks modifitseerimiseks.



Vaatame kiiresti üle kaks teemat puudutavat süsteemi, enne kui asume selle üksikasjadesse,

Ebaõnnestunud kiire süsteem:

Süsteem on varustatud tõrkekindla süsteemiga, kui see lülitub välja kohe pärast tõrke ilmnemist. Toimingud katkestatakse koheselt ja tõrked või vead paljastatakse.

Ebaõnnestumissüsteem:

Kui süsteem jätkab töötamist ka pärast tõrke või tõrke tekkimist, on süsteem märgitud tõrkekindlaks. Nad ei katkesta toimingut ja varjavad vigu selle asemel, et neid paljastada.



mis on HTML-i sildimärk

Java iteraatorid võimaldavad meil kogu kollektsiooni objektide vahel liikuda. Kollektsiooni tagastatud iteraatorid on kas ebaõnnestunud kiiresti või ebaõnnestunult.

Ebaõnnestub kiire itaator

Ebaõnnestunud Java-i iteraatorid ei luba kollektsioonil ühtegi struktuurimuudatust, kordades seda. Struktuurimuutmine hõlmab kogu kollektsiooni mis tahes elemendi lisamist, eemaldamist või värskendamist samal ajal selle iteratsiooni tehes. Kui iteratsiooni käigus on kogu struktuuriliselt modifitseeritud, viskab iteraator välja ConcurrentModificationExceptioni.

Siiski tuleb märkida, et kui üksus eemaldatakse iteraatorite enda meetodi abil, st eemalda () meetod, ei tehta erandit. See on täiesti ohutu protsess. veenduge, et teil on java installitud oma süsteemis

Ebaõnnestunud iteraatori näide:

import java.util.HashMap import java.util.Iterator import java.util.Map avalik klass FailFastExample {public static void main (String [] args) {Map monthIndex = new HashMap () monthIndex.put ('1', 'January ') monthIndex.put (' 2 ',' February ') monthIndex.put (' 3 ',' March ') Iteraatori iteraator = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // elemendi lisamine kaardile // erand visatakse järgmise () meetodi järgmise kõne // korral. kuuIndex.put ('4', 'aprill')}}}

Väljund:

Erand lõimes „main” java.util.ConcurrentModificationException

aadressil java.util.HashMap $ HashIterator.nextEntry (tundmatu allikas)

Vaatame nüüd faili Fail Safe Iterator,

Ebaõnnestumise ohutu kordaja

Erinevalt Fail Fast iteraatoritest ei tekita Fail Safe Iterators erandeid, kui kollektsiooni iteratsiooni käigus muudetakse. Selle põhjuseks on asjaolu, et nad korduvad tegeliku kollektsiooni asemel kogu kloonil. Tegeliku kollektsiooni struktuurimuudatused jäävad neile märkamatuks.

Tuleb siiski tähele panna, et tõeliselt ebaõnnestumiskindlat iteraatorit pole olemas. Oleks kohane nimetada seda nõrgalt järjepidevaks. See tähendab lihtsalt seda kui iteratsiooni käigus modifitseeritakse kogu, mida itaator näeb, nõrgalt tagatud. See käitumine on eri kogude puhul erinev ja see on dokumenteeritud Javadocsis.

Tõrkekindla iteraatori näide:

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

Väljund:

  • Jaanuar
  • Veebruar
  • Märts

Lõpuks võrdleme selles artiklis neid kordajaid,

Erinevused: ebaõnnestub kiiresti ja ebaõnnestub iteraator

Allpool on toodud kahe iteraatori vahelised olulised erinevused:

Parameetrid Ebaõnnestub kiire itaator Ebaõnnestumise ohutu kordaja
Viska samaaegne modifitseerimise erand

Jah, nad viskavad CocurrentModificationExcepti-sisse, kui kogu on korduv, kui seda üle korratakse.

Ei, nad ei tee ühtegi erandit, kui kogu muudetakse selle iteratsiooni ajal.

Kloonige kogu

Ei, nad kasutavad elementide kohal liikumiseks originaalkollektsiooni.

Jah, nad kasutavad läbimiseks originaalkogu koopiat.

Mälu ülal

Ei, nad ei vaja lisamälu.

Jah, nad vajavad kollektsiooni kloonimiseks lisamälu.

Näited

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Need iteraatorid on nii unikaalsed kui ka java mitmekülgses keeles väga vajalikud. Kuigi tõrkekindlal on lohutav rõngas, osutub tõrkekindel iteraator tugevaks.

See viib selle artikli lõpuni. kui soovite rohkem teada saada, siis vaadake autor Edureka. Edureka Java J2EE ja SOA koolitus- ja sertifitseerimiskursus on mõeldud selleks, et anda teile Java-programmeerimises algust ja õpetada teid nii Java-põhiprogrammide kui ka täiustatud kontseptsioonide jaoks koos erinevate Java-raamistikega nagu Hibernate & Spring.

Kas teil on meile küsimus? Palun mainige seda selle ajaveebi „Fail Fast vs Fail Safe“ kommentaaride jaotises ja võtame teiega ühendust niipea kui võimalik.