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

La différence entre la map de hash concurrente et la map de hash synchronisée en Java

Concurrent Hashmap est dans JDK1.5Class. Le HashMap concurrent applique un verrou au niveau des réservoirs appelés fragments lors de l'ajout ou de la mise à jour de la carte. Par conséquent, le HashMap concurrent permet des opérations de lecture et d'écriture concurrentes sur la carte. 

La méthode synchronizedHashMap() de Collection est une méthode du cadre Collection. Cette méthode applique un verrou à l'ensemble de la collection. Par conséquent, si un thread accède à la carte, aucun autre thread ne peut accéder à la même carte. 

NuméroCléHashMap concurrentHashMap synchronisée
1
Réalisation
C'est une classe qui implémente l'interface de hash mapping concurrent et de sérialisation. 
C'est une méthode de la classe Collection.  
2
Mécanisme de verrouillage
Verrouiller une partie
Verrouiller l'ensemble de la carte. 
3
Performance
Le HashMap concurrent permet des lectures et écritures concurrentes. Par conséquent, la performance est meilleure que celle de la carte synchronisée. 
Plusieurs threads ne peuvent pas accéder simultanément à la carte. Par conséquent, la performance est relativement inférieure à celle du HashMap concurrent.
4
Clé vide
Il n'est pas permis d'utiliser null en tant que clé ou valeur. 
Il permet null en tant que clé.
5 
Exception de modification concurrente
Il ne provoque pas d'exception de modification concurrente. 
L'itérateur retourné par la carte synchronisée provoque une exception de modification concurrente

Exemple 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");
      //Créer une carte synchronisée
      Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Map synchronisée est : "+syncmap);
   }
}

ConcurrentHashMap---d'exemple

public class ConcurrentHashMap---Example {
   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--- est: "+laptopmap);
   }
}