Iteradores Fail Fast y Fail Safe en Java: ¿Cuál es la diferencia?



Este artículo sobre 'Iteradores Fail Fast y Fail Safe' le ayudará a comparar estos dos iteradores en detalle con ejemplos relevantes.

admite dos tipos de iteradores, el primero es rápido y el segundo a prueba de fallos. Estos juegan un papel vital cuando se trata del manejo de excepciones en Java. En este artículo sobre 'Iteradores Fail Fast y Fail Safe', analizaremos el funcionamiento de los dos iteradores, así como la diferencia esencial entre ellos.

Los siguientes son los consejos que se analizarán en este artículo:





Antes de entrar en una explicación detallada, familiaricémonos con el concepto de modificación concurrente.

Modificación concurrente

Cuando un solo hilo (o varios hilos), itera sobre una colección, puede cambiar la estructura de la colección, ya sea agregando o eliminando el elemento en la colección, o actualizando el valor del elemento en una posición particular. Este proceso se conoce como modificación concurrente.



Echemos un vistazo rápido a los dos sistemas que se refieren al tema anterior, antes de entrar en detalles del mismo,

Fail Fast Sysetm:

Un sistema se etiqueta como un sistema rápido de fallas si se apaga inmediatamente después de que ocurre un error. Las operaciones se abortan instantáneamente y se exponen los fallos o los errores.

Sistema a prueba de fallas:

Un sistema se etiqueta como un sistema a prueba de fallas, si continúan funcionando incluso después de que se haya producido una falla o error. No abortan una operación y ocultan los errores en lugar de exponerlos.



Talend open studio para tutorial de integración de datos

Los iteradores en java nos permiten recorrer los objetos de la colección. Los iteradores devueltos por la colección son de naturaleza rápida o a prueba de fallas.

Fail Fast Iterator

Los iteradores de falla rápida en Java no permiten ningún tipo de modificación estructural a una colección mientras se itera sobre ella. La modificación estructural incluye agregar, eliminar o actualizar cualquier elemento de la colección mientras se itera sobre él. El iterador arroja una ConcurrentModificationException, si una colección se modifica estructuralmente durante el proceso de iteración.

Sin embargo, debe tenerse en cuenta que si un elemento se elimina utilizando el método propio de los iteradores, es decir, el método remove (), no se lanza ninguna excepción. Es un proceso completamente seguro. asegúrate de tener java instalado en su sistema

Ejemplo de iterador Fail Fast:

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', 'enero ') monthIndex.put (' 2 ',' febrero ') monthIndex.put (' 3 ',' marzo ') Iterador iterador = monthIndex.keySet (). iterator () while (iterator.hasNext ()) {System.out .println (monthIndex.get (iterator.next ())) // agregar un elemento al mapa // se lanzará una excepción en la próxima llamada // del método next (). monthIndex.put ('4', 'abril')}}}

Salida:

Excepción en el hilo 'principal' java.util.ConcurrentModificationException

en java.util.HashMap $ HashIterator.nextEntry (Fuente desconocida)

Ahora sigamos adelante y echemos un vistazo a Fail Safe Iterator,

Iterador a prueba de fallos

A diferencia de los iteradores Fail Fast, los iteradores Fail Safe no generan ninguna excepción si la colección se modifica durante el proceso de iteración. Esto se debe al hecho de que iteran en el clon de la colección, en lugar de en la colección real. Las modificaciones estructurales realizadas en la colección actual pasan desapercibidas para ellos.

Sin embargo, debe tenerse en cuenta que no existe un iterador verdaderamente a prueba de fallas. Sería apropiado llamarlo Débilmente consistente. Esto simplemente significa que Si una colección se modifica durante el proceso de iteración, lo que ve el iterador está débilmente garantizado. Este comportamiento difiere para diferentes colecciones y está documentado en Javadocs.

Ejemplo de iterador a prueba de fallos:

public class FailSafeExample {public static void main (String [] args) {ConcurrentMap monthIndex = new ConcurrentHashMap () monthIndex.put ('1', 'enero') monthIndex.put ('2', 'febrero') monthIndex.put ( '3', 'Marzo') Iterador iterador = monthIndex.keySet (). Iterator () while (iterator.hasNext ()) {System.out.println (monthIndex.get (iterator.next ())) monthIndex.put ( '4', 'abril')}}}

Salida:

c ++ que es el espacio de nombres
  • enero
  • febrero
  • marzo

Finalmente, en este artículo compararíamos estos iteradores,

Diferencias: iterador Fail Fast y Fail Safe

A continuación se muestran las diferencias esenciales entre los dos iteradores:

Parámetros Fail Fast Iterator Iterador a prueba de fallos
Lanzar excepción de modificación simultánea

Sí, lanzan CocurrentModificationExcepti-on si se modifica una colección mientras se itera sobre ella.

No, no lanzan ninguna excepción si se modifica una colección mientras se itera sobre ella.

Clonar la colección

No, usan colección original para atravesar los elementos.

salario de desarrollador java en india

Sí, utilizan la copia de la colección original para recorrer.

Sobrecarga de memoria

No, no requieren memoria adicional.

Sí, requieren memoria adicional para clonar la colección.

Ejemplos

HashMap, Vector, ArrayList, HashSet

CopyOnWriteArrayList

Estos iteradores son únicos y muy necesarios en el versátil lenguaje de java. Aunque a prueba de fallas suena reconfortante, el iterador de falla rápida demuestra ser robusto.

Esto trae al final de este artículo. en caso de que desee obtener más información, consulte el por Edureka. El curso de capacitación y certificación Java J2EE y SOA de Edureka está diseñado para brindarle una ventaja en la programación Java y capacitarlo para los conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este blog 'Fail Fast vs Fail Safe' y nos comunicaremos con usted lo antes posible.