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

La diferencia entre mapa hash concurrente y mapa hash sincronizado en Java

HashMap concurrente es de jdk1.5Se introduce la clase. El mapeo hash concurrente aplica candados a nivel de búfer de almacenamiento denominado fragmento solo cuando se añade o actualiza el mapeo. Por lo tanto, el mapeo hash concurrente permite operaciones de lectura y escritura concurrentes en el mapeo. 

El método synchronizedHashMap (Collection.syncronizedHashMap()) es un método del marco Collection. Este método aplica un candado a toda la colección. Por lo tanto, si un hilo está accediendo al mapeo, ningún otro hilo puede acceder al mismo mapeo. 

NúmeroClaveMapeo hash concurrenteMapeo hash sincronizado
1
Implementación
Es una clase que implementa la interfaz de mapeo hash concurrente y la interfaz serializable. 
Es un método de la clase Collection.  
2
Estructura de bloqueo
Bloquear una parte
Bloquear toda la estructura de mapeo. 
3
Rendimiento
ConcurrentHashMap permite operaciones de lectura y escritura concurrentes. Por lo tanto, el rendimiento es mejor que el de los mapeos sincronizados. 
No se permite que múltiples hilos accedan al mapeo simultáneamente. Por lo tanto, el rendimiento es relativamente inferior al de ConcurrentHashMap.
4
Clave vacía
No se permite null como clave o valor. 
Permite null como clave.
5 
Excepción de modificación concurrente
No lanza una excepción de modificación concurrente. 
El iterador devuelto por el mapeo sincronizado lanza una excepción de modificación concurrente

Ejemplo de SynchronizedMap

public class SynchronizedMapExample {
   public static void main(String[] args) {
      Map<Integer,String> laptopmap = new HashMap<Integer,String>();
      laptopmap.put(1,"IBM");
      laptopmap.put(2,"Dell");
      laptopmap.put(3,"HCL");
      //Crear un mapeo sincronizado
      Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Mapa sincronizado es: "+syncmap);
   }
}

ConcurrentHashMap---ejemplo

public class ConcurrentHashMap---Ejemplo {
   public static void main(String[] args) {
      //ConcurrentHashMap---
      Map<Integer,String> laptopmap = new ConcurrentHashMap---<Integer,String>();
      laptopmap.put(1,"IBM");
      laptopmap.put(2,"Dell");
      laptopmap.put(3,"HCL");
      System.out.println("ConcurrentHashMap--- es: "+laptopmap);
   }
}