Por Chaitanya Singh | Filed Under: Colecciones de Java
HashMap es una clase de colección no sincronizada. Si necesitamos realizar operaciones de seguridad de hilos en él, entonces debemos sincronizarlo explícitamente. En este tutorial veremos cómo sincronizar HashMap.
Ejemplo:
En este ejemplo tenemos un HashMap
Unpunto importante a tener en cuenta en el siguiente ejemplo:
Iterator debe ser usado en un bloque sincronizado aunque hayamos sincronizado el HashMap explícitamente (como lo hicimos en el siguiente código).
Sintaxis:
Mapa del mapa = Collections.synchronizedMap(new HashMap());...//Esto no necesita estar en el bloque sincronizado set set = map.keySet();// Sincronizar en el mapa, no en setsynchronized (mapa) { // Iterator debe estar en el bloque sincronizado Iterator iterator = set.iterator(); while (iterator.hasNext()){ ... }}
Código completo:
paquete beginnersbook.com;importar java.util.Collections;importar java.util.HashMap;importar java.util.Map;importar java.util.Set;importar java.util.Iterator;clase pública HashMapSyncExample { public static void main(String args[]) { HashMap<Integer, String> hmap= new HashMap<Integer, String>(); hmap.put(2, "Anil"); hmap.put(44, "Ajit"); hmap.put(1, "Brad"); hmap.put(4, "Sachin"); hmap.put(88, "XYZ"); Map map= Collections.synchronizedMap(hmap); Set set = map.entrySet(); synchronized(map){ Iterator i = set.iterator(); // Mostrar elementos while(i.hasNext()) { Map.Entry me = (Map.Entry)i.next(); System.out.print(me.getKey() + ": "); System.out.println(me.getValue()); } } }}
Salida:
1: Brad2: Anil4: Sachin88: XYZ44: Ajit
- Java – Obtener el tamaño del ejemplo de HashMap
- Cómo sincronizar ArrayList en java con el ejemplo
- Copiar todos los elementos de un Vector a otro ejemplo de Vector
- Cómo obtener el tamaño del ejemplo de TreeMap – Java
- Ejemplo de Iterador de TreeMap – Java
- Cómo intercambiar dos elementos en una lista de arreglos…
Comentarios
- munnisays2 de julio de 2014 a la 1:07 PM ¿Cuál es el uso de la sincronización del mapa de hachís? Como la sincronización dice sólo uno a la vez – ¿qué parte del ejemplo dice que sólo uno está siendo accedido? Básicamente quería saber la diferencia entre la sincronización en blanco y negro y el mapa de hachís no sincronizado usando un ejemplo de múltiples hilos y básicamente mostrando la diferencia. Sería genial si pudiera aclarar mis preguntas. Responda
- Chinmayee DassaysApril 3, 2015 a las 11:38 AMHello, en el programa anterior, cómo llegó la salida, no estoy obteniendo, en qué forma, se está imprimiendo el resultado?? puede usted por favor informar sobre esto… ThankschinmayeeReplyRajeev ShrikarsaysJune 10, 2016 a las 8:14 AM qué error está obteniendo? Se ejecutó perfectamente para mí. Puede ser que hayas mantenido el nombre del paquete tal como está, trata de eliminar esa línea o mantener el archivo java de acuerdo con el nombre del paquete. Responde.
- Rajeev Shrikarsays 10 de junio de 2016 a las 8:09 AMsimple y fácilmente comprensible. Por favor, muestre un programa en un entorno multi-hilo también! Responder