English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Número | Clave | Insuficiente | Seguridad 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. |
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
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)