Falla ràpidament i falla els iteradors a Java: Quina és la diferència?



Aquest article sobre 'Iteradors de fallades ràpides i segures' us ajudarà a comparar detalladament aquests dos iteradors amb exemples rellevants.

admet dos tipus d'iteradors, el primer és un error ràpid i el segon és a prova de fallades. Aquests juguen un paper vital pel que fa al tractament d’excepcions a Java. En aquest article sobre ‘Fail Fast and Fail Safe Iterators’, analitzarem el funcionament dels dos iteradors i la diferència essencial entre ells.

A continuació es detallen les indicacions que es tractaran en aquest article:





com fer proves de bases de dades

Abans d’entrar en una explicació detallada, ens podem familiaritzar amb el concepte de modificació simultània.

Modificació simultània

Quan un sol fil (o diversos fils) repeteix una col·lecció, pot canviar l'estructura de la col·lecció, ja sigui afegint o suprimint l'element de la col·lecció o bé actualitzant el valor de l'element en una posició determinada. Aquest procés es coneix com a modificació simultània.



Vegem ràpidament els dos sistemes que es refereixen al tema anterior, abans d’entrar en els detalls del mateix,

Error de sistema ràpid:

Un sistema s’etiqueta com a sistema de fallada ràpida, si s’apaga immediatament després que es produeixi un error. Les operacions s’interrompen instantàniament i s’exposen les fallades o els errors.

Sistema de seguretat:

Un sistema s’etiqueta com a sistema de fallada, si continua funcionant fins i tot després que es produeixi un error o un error. No interrompen una operació i amaguen els errors en lloc d'exposar-los.



Els iteradors a Java ens permeten recórrer els objectes de la col·lecció. Els iteradors retornats per la Col·lecció són fallats ràpidament o de seguretat.

Iterador ràpid de falles

Si els iteradors ràpids de Java no permeten qualsevol tipus de modificació estructural a una col·lecció mentre es repeteix sobre ella. La modificació estructural inclou afegir, eliminar o actualitzar qualsevol element de la col·lecció mentre itereu sobre ella. L'iterador genera una excepció ConcurrentModificationException, si una col·lecció es modifica estructuralment durant el procés d'iteració.

Tot i això, cal tenir en compte que si s’elimina un element mitjançant el mètode propi dels iteradors, és a dir, el mètode remove (), no es produeix cap excepció. És un procés totalment segur. assegureu-vos que teniu java instal·lat al vostre sistema

Exemple d'iterador ràpid de falles:

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 () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // afegint un element al mapa // excepció es llançarà a la següent trucada // del mètode next (). monthIndex.put ('4', 'Abril')}}}

Sortida:

Excepció al fil 'principal' java.util.ConcurrentModificationException

a java.util.HashMap $ HashIterator.nextEntry (font desconeguda)

Ara anem endavant i fem un cop d'ull a l'iterador de fallades segures,

Iterador de seguretat

A diferència dels iteradors Fail Fast, els iteradors Fail Safe no ofereixen cap excepció si la col·lecció es modifica durant el procés d’iteració. Això es deu al fet que recorren el clon de la col·lecció en lloc de la col·lecció real. Les modificacions estructurals realitzades a la col·lecció real les passen desapercebudes.

Tot i això, cal tenir en compte que no existeix un iterador realment segur. Seria adequat anomenar-lo com a dèbilment coherent. Això significa simplement això si una col·lecció es modifica durant el procés d’iteració, el que veu l’iterador està dèbilment garantit. Aquest comportament difereix per a diferents col·leccions i es documenta a Javadocs.

Exemple d'iterador de seguretat:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'January') monthIndex.put ('2', 'February') monthIndex.put ( '3', 'març') Iterador iterador = monthIndex.keySet (). Iterador () mentre (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put () '4', 'abril')}}}

Sortida:

  • Gener
  • Febrer
  • Març

Finalment, en aquest article compararíem aquests iteradors,

Diferències: Iterador de fallades ràpides i segures

A continuació es detallen les diferències essencials entre els dos iteradors:

Paràmetres Iterador ràpid de falles Iterador de seguretat
Excepció de llançament ConcurrentModification

Sí, llancen CocurrentModificationExcepti-on si es modifica una col·lecció mentre s’itera sobre ella.

No, no ofereixen cap excepció si es modifica una col·lecció mentre la recorren.

Clona la col·lecció

No, utilitzen la col·lecció original per recórrer els elements.

què fa init a python

Sí, utilitzen la còpia de la col·lecció original per recórrer.

Memòria sobrecarregada

No, no requereixen memòria addicional.

Sí, requereixen memòria addicional per clonar la col·lecció.

Exemples

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Aquests iteradors únics i molt necessaris en el versàtil llenguatge java. Tot i que la protecció contra falles té un anell reconfortant, l’iterador de fallades ràpides demostra ser robust.

Això porta al final d’aquest article. en cas que vulgueu obtenir més informació, consulteu per Edureka. El curs de formació i certificació de Java J2EE i SOA d’Edureka està dissenyat per proporcionar-vos un avantatge en la programació de Java i formar-vos tant per a conceptes bàsics com avançats de Java juntament amb diversos marcs Java com Hibernate & Spring.

Tens alguna pregunta? Si us plau, mencioneu-ho a la secció de comentaris d’aquest bloc “Fail Fast vs Fail Safe” i us respondrem el més aviat possible.