Fail Fast en Fail Safe Iterators in Java: wat is het verschil?



Dit artikel over 'Fail Fast And Fail Safe Iterators' helpt je deze twee iterators in detail te vergelijken met relevante voorbeelden.

ondersteunen twee soorten iterators, de eerste is fail-fast en de tweede is fail-safe. Deze spelen een cruciale rol als het gaat om het afhandelen van uitzonderingen in Java. In dit artikel over ‘Fail Fast and Fail Safe Iterators’ zullen we de werking van de twee iteratoren analyseren, evenals het essentiële verschil tussen beide.

Hieronder volgen de tips die in dit artikel worden besproken:





Voordat we ingaan op een gedetailleerde uitleg, laten we ons vertrouwd maken met het concept van gelijktijdige wijziging.

Gelijktijdige wijziging

Wanneer een enkele thread (of meerdere threads) een verzameling herhalen, kan dit de structuur van de verzameling veranderen, hetzij door het element in de verzameling toe te voegen of te verwijderen, of door de waarde van het element op een bepaalde positie bij te werken. Dit proces staat bekend als gelijktijdige wijziging.



Laten we snel eens kijken naar de twee systemen die het bovenstaande onderwerp betreffen, voordat we ingaan op de details van hetzelfde,

Fail Fast Sysetm:

Een systeem wordt een fail-fastsysteem genoemd als het onmiddellijk na het optreden van een fout wordt uitgeschakeld. De bewerkingen worden onmiddellijk afgebroken en de storingen of fouten worden zichtbaar.

Fail Safe-systeem:

Een systeem wordt een fail-safe systeem genoemd als het blijft werken, zelfs nadat er een storing of fout is opgetreden. Ze breken een bewerking niet af en verbergen de fouten in plaats van ze bloot te leggen.



Iterators in java stellen ons in staat om de collectieobjecten te doorlopen. De iteratoren die door de collectie worden geretourneerd, zijn ofwel fail-fast ofwel fail-safe van aard.

Fail Fast Iterator

Fail-fast iterators in Java staan ​​elk type structurele wijziging van een verzameling tijdens het itereren ervan niet toe. Structurele wijziging omvat het toevoegen, verwijderen of bijwerken van een element in de verzameling terwijl u eroverheen herhaalt. De iterator genereert een ConcurrentModificationException, als een verzameling structureel wordt gewijzigd tijdens het iteratieproces.

Er moet echter worden opgemerkt dat als een item wordt verwijderd met behulp van de iterators-eigen methode, d.w.z. de methode remove (), er geen uitzondering wordt gegenereerd. Het is een volkomen veilig proces. zorg dat je hebt java geïnstalleerd op uw systeem

Voorbeeld van 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 = nieuwe HashMap () monthIndex.put ('1', 'januari ') monthIndex.put (' 2 ',' februari ') monthIndex.put (' 3 ',' maart ') Iterator iterator = monthIndex.keySet (). iterator () terwijl (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // een element toevoegen aan Map // uitzondering wordt gegenereerd bij de volgende aanroep // van de volgende () methode. monthIndex.put ('4', 'April')}}}

Uitgang:

Uitzondering in thread 'main' java.util.ConcurrentModificationException

op java.util.HashMap $ HashIterator.nextEntry (onbekende bron)

Laten we nu eens kijken naar Fail Safe Iterator,

Fail Safe Iterator

In tegenstelling tot Fail Fast-iterators, geven Fail Safe-iterators geen uitzonderingen als de verzameling tijdens het iteratieproces wordt gewijzigd. Dit komt door het feit dat ze de kloon van de verzameling herhalen, in plaats van de daadwerkelijke verzameling. De structurele aanpassingen aan de eigenlijke collectie worden door hen niet opgemerkt.

Er moet echter worden opgemerkt dat er niet zoiets bestaat als een echte Fail Safe Iterator. Het zou gepast zijn om het zwak consistent te noemen. Dit betekent gewoon dat als een collectie wordt gewijzigd tijdens het iteratieproces, wat de iterator ziet is zwak gegarandeerd. Dit gedrag verschilt voor verschillende collecties en wordt gedocumenteerd in Javadocs.

Voorbeeld van Fail Safe Iterator:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = nieuwe ConcurrentHashMap () monthIndex.put ('1', 'januari') monthIndex.put ('2', 'februari') monthIndex.put ( '3', 'maart') Iterator iterator = monthIndex.keySet (). Iterator () terwijl (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) maandIndex.put ( '4', 'April')}}}

Uitgang:

  • januari-
  • februari
  • maart

Ten slotte zouden we in dit artikel deze iteratoren vergelijken,

Verschillen: Fail Fast and Fail Safe Iterator

Hieronder staan ​​de essentiële verschillen tussen de twee iteratoren:

Parameters Fail Fast Iterator Fail Safe Iterator
Gooi ConcurrentModification-uitzondering

Ja, ze gooien CocurrentModificationExcepti-on als een verzameling wordt gewijzigd terwijl deze wordt herhaald.

Nee, ze genereren geen uitzondering als een verzameling wordt gewijzigd terwijl deze wordt herhaald.

Kloon de collectie

Nee, ze gebruiken originele collectie om over de elementen te lopen.

samenvoegen sorteren beslissingsboom 4 elementen

Ja, ze gebruiken de kopie van de originele collectie om doorheen te reizen.

Geheugen boven het hoofd

Nee, ze hebben geen extra geheugen nodig.

Ja, ze hebben extra geheugen nodig om de verzameling te klonen.

Voorbeelden

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Deze iteratoren zijn zowel uniek als hard nodig in de veelzijdige taal van Java. Hoewel fail-safe een geruststellende klank heeft, blijkt de fail-fast iterator robuust te zijn.

Hiermee komt het einde van dit artikel aan. als je meer wilt weten, kijk dan op de door Edureka. Edureka's Java J2EE- en SOA-trainings- en certificeringscursus is ontworpen om u een voorsprong te geven in het programmeren van Java en om u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & Spring.

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van deze 'Fail Fast vs Fail Safe' -blog en we nemen zo snel mogelijk contact met u op.