Come implementare al meglio la mappa hash simultanea in Java?



Questo articolo ti introdurrà a un concetto chiamato Concurrent Hash Map in Java e seguirà una dimostrazione pratica

Questo articolo ti introdurrà a un concetto chiamato Concurrent Hash Map In e seguirlo con una dimostrazione pratica. I seguenti suggerimenti saranno trattati in questo articolo,

Andando avanti con questo articolo su Concurrent Hash Map in Java





Come funziona ConcurrentHashMap internamente?

__in se stesso)

Da Java 5 in poi, ConcurrentHashMap viene introdotto come alternativa a HashTable. Possiamo anche ottenere una mappa sincronizzata usando il metodo della classe di utilità chiamato synchronizedMap (), ma c'è uno svantaggio di questo metodo, cioè prestazioni molto scarse in quanto solo un singolo thread può accedervi contemporaneamente. Quindi ConcurrentHashMap risolve questi problemi.



Andando avanti con questo articolo su Concurrent Hash Map in Java

Perché altra mappa?

Anche se abbiamo già HashMap, HashTable quindi ciò che è necessario per ConcurrentHashMap, è perché fornisce prestazioni migliori allo stesso tempo è thread-safe.

Andando avanti con questo articolo su Concurrent Hash Map in Java



Come è diverso?

Si basa anche sull'hashing, ma le sue prestazioni sono migliorate dalla sua strategia di blocco. A differenza di HashTable o HashMap sincronizzato, non applica lo stesso blocco su ogni metodo, utilizza un blocco separato per ogni metodo, utilizza il blocco di rientro per questo scopo. Simile a HashMap, ConcurrentHashMap ha 16 bucket cioè segmenti, per creare ConcurrentHashMap con più di 16 bucket ha diversi costruttori.

Prima di parlare in dettaglio, esaminiamo alcuni concetti di seguito:

ConcurrentHashMap: questa mappa consente l'accesso simultaneo al thread. Solo una parte della mappa chiamata segmento, ovvero la struttura dei dati sottostante, viene bloccata durante l'aggiunta o l'aggiornamento della mappa. Consente l'accesso simultaneo al thread per leggere i dati senza blocco. È stato introdotto per migliorare le prestazioni.

  • Livello di concorrenza: è un numero che è un numero stimato di thread aggiornati contemporaneamente.
  • Fattore di carico: è un valore utilizzato per controllare il fattore di ridimensionamento.
  • Capacità iniziale: è una proprietà che crea una mappa con le dimensioni fornite.

Vediamo il diagramma sotto e proviamo a capire come funziona ConcurrentHashMap.

Immagine- Hashmap simultaneo- Edureka

Quindi, nel diagramma sopra, abbiamo 16 blocchi che bloccano solo una parte della mappa richiesta in modo che altri metodi possano essere accessibili da thread diversi, migliorando così le prestazioni.

Simile a HashMap, ConcurrentHashMap funziona in modo simile: contiene 16 segmenti per impostazione predefinita e memorizza l'elemento tramite hash, quindi se gli elementi hanno lo stesso hash vengono memorizzati sullo stesso segmento come mostrato nel diagramma sopra con l'aiuto dell'elenco collegato.

Andando avanti con questo articolo su Concurrent Hash Map in Java

Differenza tra ConcurrentHashMap e HashMap

HashMap appartiene alle raccolte mentre ConcurrentHashMap appartiene alle raccolte simultanee, tuttavia ci sono molte altre differenze tra di loro.

  • ConcurrentHashMap èThread-safe cioèsincronizzato ma HashMap non è sincronizzato.
  • ConcurrentHashMap ha prestazioni basse perché è sincronizzato perché a volte i thread devono aspettare, ma HashMap ha prestazioni elevate perché non è sincronizzato e tutti i thread possono accedervi contemporaneamente.
  • Otterremo ConcurrentModificationException se due thread stanno provando contemporaneamente a modificare o aggiungere contenuti di Object. Tuttavia, nel caso di ConcurrentHashMap non avremo alcuna eccezione durante l'esecuzione della stessa operazione.

  • Sono consentiti valori nulli per chiave e valori in HashMap, tuttavia, ConcurrentHashMap non consente valori nulli per chiave e valore se ha tentato di aggiungere un valore nullo otterremo un'eccezione, ovvero NullPointerException.

  • HashMap è stato introdotto in JDK 1.2 mentre ConcurrentHashMap è stato introdotto in JDK 1.5.

    cos'è un evento in javascript

Come abbiamo visto in precedenza per prestazioni migliori, consiste in un array di nodi come bucket di tabella che prima erano segmenti di tabella Java 8 .

I bucket vengono inizializzati pigramente quando viene eseguito il primo inserimento. Ogni bucket può essere bloccato in modo indipendente bloccando il primo nodo del bucket, inoltre le operazioni di lettura non si bloccano.

Rispetto a HashMap, ConcurrentHashMap fornisce l'extra concurrencyLevel argomento per controllare il numero di thread stimati da utilizzare.

Costruttori:

  1. ConcurrentHashMap m = new ConcurrentHashMap ()

    Viene creata una nuova mappa vuota con una capacità iniziale predefinita di 16, un fattore di carico di 0,75 e un livello di concorrenza 16.

  2. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity)
    Viene creata una nuova mappa vuota con una capacità iniziale specificata, un fattore di carico di 0,75 e un livello di concorrenza 16.

  3. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor)

    Viene creata una nuova mappa vuota con una capacità iniziale e un fattore di carico specificati con il livello di concorrenza 16.

  4. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Viene creata una nuova mappa vuota con una capacità iniziale, un fattore di carico e un livello di concorrenza specificati.

  5. ConcurrentHashMap m = new ConcurrentHashMap (mappa m)
    Crea una nuova ConcurrentHashMap dalla mappa fornita.

Gli altri due argomenti: initialCapacity e loadFactor hanno funzionato allo stesso modo di HashMap.
ConcurrentMap è coerente con la memoria sulle operazioni chiave / valore in un ambiente multi-thread.

Andando avanti con questo articolo su Concurrent Hash Map in Java

Insidie

Durante il recupero degli oggetti, ConcurrentHashMap non è bloccato e potrebbe sovrapporsi alle operazioni di aggiornamento, quindi per prestazioni migliori recuperano solo le operazioni di aggiornamento completate più di recente.

I risultati dei metodi di stato aggregato inclusi size, isEmpty e containsValue sono in genere utili solo quando una mappa non è sottoposta ad aggiornamenti simultanei in altri thread.

Se gli aggiornamenti simultanei sono controllati correttamente, questi metodi di stato possono essere affidabili.

Sebbene questi metodi non garantiscano in tempo reale.

La capacità della tabella predefinita è 16, tuttavia è possibile modificarla utilizzando il livello di concorrenza.

fibonacci in c ++
public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

Se le chiavi delle chiavi devono essere ordinate, possiamo usare ConcurrentSkipListMap.

Ora, dopo aver eseguito il programma sopra, avresti capito la mappa hash concorrente in Java. Quindi siamo giunti alla fine di questo articolo su Se desideri saperne di più, dai un'occhiata al , una società di formazione online affidabile. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per formarti sia sui concetti di base che avanzati su Java insieme a vari framework Java come Hibernate e Spring.

Hai domande per noi? Si prega di menzionarlo nella sezione commenti di questo articolo e ti risponderemo il prima possibile.