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

La differenza tra mappature hash concorrenti e mappature hash sincrone in Java

La ConcurrentHashMap è una classe introdotta in JDK1.5. La ConcurrentHashMap applica un blocco di sicurezza solo al livello dei contenitori chiamati segmenti durante l'aggiunta o l'aggiornamento della mappatura. Pertanto, la ConcurrentHashMap permette operazioni di lettura e scrittura concorrenti sulla mappatura. 

La synchronizedHashMap (Collection.syncronizedHashMap()) è un metodo del framework Collection. Questo metodo applica un blocco di sicurezza all'intera raccolta. Pertanto, se un thread sta accedendo a questa mappatura, nessun altro thread può accedere alla stessa mappatura. 

NumeroChiaveMappa hash concorrenteMappa hash sincronizzata
1
Implementazione
È una classe che implements l'interfaccia di mappa hash concorrente e serializzabile. 
È un metodo della classe Collection.  
2
Struttura di blocco
Blocca una parte
Blocca l'intera mappa. 
3
Prestazioni
La mappa hash concorrente permette letture e scrittura concorrenti. Pertanto, le prestazioni sono migliori rispetto alla mappa sincronizzata. 
Non è possibile che più thread accedano contemporaneamente alla mappa. Pertanto, le prestazioni sono relativamente inferiori rispetto alla mappa hash concorrente.
4
Chiave vuota
Non si può usare null come chiave o valore. 
Permette null come chiave.
5 
Eccezione di modifica concorrente
Non induce l'eccezione di modifica concorrente. 
L'iteratore restituito dalla mappa sincronizzata induce l'eccezione di modifica concorrente

Esempio di 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");
      //Creare una mappa sincronizzata
      Map<Integer,String> syncmap = Collections.synchronizedMap(laptopmap);
      System.out.println("Mappa sincronizzata è: " + syncmap);
   }
}

Esempio di ConcurrentHashMap---

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--- è: " + laptopmap);
   }
}