English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Diferencia entre rápido y seguro de fallo en Java

NúmeroClaveInsuficienteSeguridad de fallo
1
Excepciones
Cualquier cambio en la colección (por ejemplo, agregar, eliminar y actualizar la colección durante el hilo) es fallar al iterar la colección y luego hacer que se lance la excepción de modificación concurrente rápidamente. 
Las colecciones de seguridad de fallo no lanzan excepciones. 
2.
Tipos de colección
ArrayList y las colecciones hashmap son ejemplos de iteradores de fracaso rápido 
CopyOnWrite y la modificación concurrente son ejemplos de iteradores de seguridad de fallo 
3.
Rendimiento y memoria
trabaja en la colección real. Por lo tanto, este iterador no necesita más memoria y tiempo 
Está procesando una copia de la colección, no la colección real. El costo de tiempo y memoria
4.
Elementos de modificación
 El iterador no permite modificar la colección mientras se está iterando.
Los iteradores de protección contra fallos permiten modificar la colección mientras se itera sobre ella.

Ejemplo de protección contra fallos

public class FailSafeExample{
   public static void main(String[] args){
      ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<String, Integer>();
      //Agregar elementos al mapeo
      map.put("Dell", 1);
      map.put("IBM", 2);
      //Obtener iterador del mapeo
      Iterator<String> it = map.keySet().iterator();
      while (it.hasNext()){
      String key = (String) it.next();
         System.out.println(key+" : "+map.get(key));
         map.put("Google", 3);
      }
   }
}

Resultado de salida

IBM:2
Dell:1

Ejemplo de protección contra fallos

public class FailFastExample{
   public static void main(String[] args){
      List<Integer> list = new ArrayList<Integer>();
      list.add(1);
      list.add(2);
      list.add(3);
      //Obtener iterador de la lista
      Iterator<Integer> it = list.iterator();
      while (it.hasNext()){
         Integer integer = (Integer) it.next();
         list.add(4);
      }
   }
}

Resultado de salida

Exception en hilo "main" java.util.ConcurrentModificationException
   at java.util.ArrayList$Itr.checkForComodification(Unknown Source)