Cum să implementăm cel mai bine harta Hash simultană în Java?



Acest articol vă va prezenta un concept numit Harta Hash simultană în Java și îl va urmări cu o demonstrație practică

Acest articol vă va prezenta un concept numit Concurrent Hash Map In și urmăriți-l cu o demonstrație practică. Următoarele indicații vor fi tratate în acest articol,

Continuăm cu acest articol despre Hash Hash simultan în Java





ce este cuplajul liber în java

Cum funcționează intern ConcurrentHashMap?

Începând cu Java 5, ConcurrentHashMap este introdus ca alternativă pentru HashTable. Putem obține, de asemenea, o hartă sincronizată folosind metoda clasei de utilitate numită synchronizedMap (), dar există un dezavantaj al acestei metode, adică performanțe foarte slabe, deoarece doar un singur fir îl poate accesa simultan. Deci, ConcurrentHashMap abordează aceste probleme.



Continuăm cu acest articol despre Hash Hash simultan în Java

De ce altă hartă?

Chiar dacă avem deja HashMap, HashTable, atunci ceea ce este nevoie de ConcurrentHashMap, este pentru că oferă performanțe mai bune, în același timp, este sigur pentru fire.

Continuăm cu acest articol despre Hash Hash simultan în Java



Cum este diferit?

De asemenea, se bazează pe hashing, dar performanța sa este îmbunătățită prin strategia sa de blocare. Spre deosebire de HashTable sau de HashMap sincronizat, acesta nu aplică aceeași blocare pe fiecare metodă, folosește o blocare separată pentru fiecare metodă, folosește în acest scop blocarea re-intrării. Similar cu HashMap, ConcurrentHashMap are 16 segmente, adică segmente, pentru a crea ConcurrentHashMap cu mai mult de 16 găleți are constructori diferiți.

Înainte de a vorbi în detaliu, permiteți-ne să trecem în revistă câteva concepte mai jos:

ConcurrentHashMap: Această hartă permite accesul simultan al firului. Doar o parte a hărții numită segment, adică structura de date subiacentă se blochează în timp ce se adaugă sau se actualizează harta. Permite accesul simultan al firului pentru a citi datele fără blocare. A fost introdus pentru a îmbunătăți performanța.

  • Nivel de concurență: este un număr care este un număr estimat de fire de actualizare simultane.
  • Factor de încărcare: este o valoare care este utilizată pentru a controla factorul de redimensionare.
  • Capacitate inițială: este o proprietate care creează o hartă cu dimensiunea furnizată.

Să vedem diagrama de mai jos și să încercăm să înțelegem cum funcționează ConcurrentHashMap.

Imagine- Hashmap simultan- Edureka

Deci, în diagrama de mai sus, avem 16 blocări care blochează doar o porțiune a hărții care este necesară, astfel încât alte metode să poată fi accesate prin diferite fire, îmbunătățind astfel performanța.

Similar cu HashMap, ConcurrentHashMap funcționează într-un mod similar, conține în mod implicit 16 segmente și stochează elementul prin hash, astfel încât dacă elementele au același hash, acestea sunt stocate pe același segment, așa cum se arată în diagrama de mai sus, cu ajutorul listei conectate.

Continuăm cu acest articol despre Hash Hash simultan în Java

Diferența dintre ConcurrentHashMap și HashMap

HashMap aparține colecțiilor, în timp ce ConcurrentHashMap aparține colecțiilor simultane, totuși există multe alte diferențe între ele.

  • ConcurrentHashMap esteCu siguranță la fire, adicăsincronizat, dar HashMap este nesincronizat.
  • ConcurrentHashMap are performanțe reduse, deoarece este sincronizat, deoarece uneori firele trebuie să aștepte, dar HashMap are performanțe ridicate, deoarece este nesincronizat și orice fire poate accesa simultan.
  • Vom obține ConcurrentModificationException dacă două fire încearcă simultan să modifice sau să adauge conținutul obiectului. Cu toate acestea, în cazul ConcurrentHashMap nu vom obține nicio excepție în timp ce efectuăm aceeași operație.

  • Valorile nule sunt permise pentru cheie și valorile din HashMap, totuși, ConcurrentHashMap nu permite valori nule pentru cheie și valoarea pe care a încercat să le adauge, vom obține excepție, adică NullPointerException.

  • HashMap este introdus în JDK 1.2, în timp ce ConcurrentHashMap este introdus în JDK 1.5.

Așa cum am văzut mai devreme pentru o performanță mai bună, aceasta constă dintr-o serie de noduri ca găleți de masă care au fost segmente de masă înainte Java 8 .

Gălețele sunt inițializate leneș când se efectuează prima inserție. Fiecare găleată poate fi blocată independent prin blocarea primului nod al găleatei, de asemenea operațiile de citire nu se blochează.

Comparativ cu HashMap, ConcurrentHashMap oferă extra concurențăLivel argument pentru a controla numărul de fire estimate de utilizat.

Constructori:

  1. ConcurrentHashMap m = nou ConcurrentHashMap ()

    Se creează o nouă hartă goală cu o capacitate inițială implicită de 16, un factor de încărcare de 0,75 și un nivel de concurență 16.

  2. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity)
    Se creează o nouă hartă goală cu o capacitate inițială specificată, un factor de încărcare de 0,75 și un nivel de concurență 16.

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

    Se creează o nouă hartă goală cu o capacitate inițială specificată și un factor de încărcare cu nivelul de concurență 16.

  4. ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Se creează o nouă hartă goală cu o capacitate inițială specificată, un factor de încărcare și un nivel de concurență.

  5. ConcurrentHashMap m = nou ConcurrentHashMap (Harta m)
    Creează un nou ConcurrentHashMap din harta furnizată.

Celelalte două argumente: initialCapacity și loadFactor au funcționat la fel ca HashMap.
ConcurrentMap este o memorie consistentă pentru operațiile cheie / valoare într-un mediu multi-thread.

cum se instalează eclipse ide

Continuăm cu acest articol despre Hash Hash simultan în Java

Capcanele

În timp ce recuperează obiecte, ConcurrentHashMap nu este blocat și se poate suprapune cu operațiile de actualizare, astfel, pentru o performanță mai bună, acestea recuperează doar cele mai recente operațiuni de actualizare finalizate.

Rezultatele metodelor de stare agregată, inclusiv dimensiunea, isEmpty și containValue, sunt de obicei utile numai atunci când o hartă nu suferă actualizări simultane în alte fire.

Dacă actualizările simultane sunt controlate corespunzător, aceste metode de stare pot fi fiabile.

Deși aceste metode nu garantează în timp real.

Capacitatea implicită a tabelului este 16, cu toate acestea o putem modifica folosind nivelul concurenței.

public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacity

Dacă tastele cheilor trebuie să fie în ordine sortată, putem folosi ConcurrentSkipListMap.

Acum, după executarea programului de mai sus, ați fi înțeles Harta Hash simultană în Java. Astfel am ajuns la sfârșitul acestui articol despre Dacă doriți să aflați mai multe, consultați , o companie de învățare online de încredere. Cursul de formare și certificare Java J2EE și SOA al Edureka este conceput pentru a vă instrui atât pentru conceptele Java de bază, cât și pentru cele avansate Java, împreună cu diverse cadre Java, cum ar fi Hibernate & Spring.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a acestui articol și vă vom răspunde cât mai curând posibil.