Kako najbolje implementirati sočasni zemljevid razprševanja v Javi?



Ta članek vam bo predstavil koncept, imenovan Concurrent Hash Map v Javi, in mu sledil s praktičnim prikazom

Ta članek vam bo predstavil koncept, imenovan Concurrent Hash Map In in nadaljevanje s praktičnim prikazom. Naslednji kazalci bodo obravnavani v tem članku,

Nadaljujemo s tem člankom o Concurrent Hash Map v Javi





Kako ConcurrentHashMap deluje interno?

Od Jave 5 naprej je ConcurrentHashMap predstavljen kot alternativa HashTable. Sinhronizirani zemljevid lahko dobimo tudi z metodo razreda pripomočkov, imenovano sinhroniziranoMap (), vendar je ta metoda pomanjkljiva, tj. Zelo slaba zmogljivost, saj lahko do nje dostopa samo ena nit hkrati. Torej ConcurrentHashMap obravnava ta vprašanja.



Nadaljujemo s tem člankom o Concurrent Hash Map v Javi

Zakaj drugi zemljevid?

Čeprav že imamo HashMap, HashTable, kaj potem potrebuje ConcurrentHashMap, je to zato, ker zagotavlja boljše delovanje, hkrati pa je varen za nit.

Nadaljujemo s tem člankom o Concurrent Hash Map v Javi



Kako je drugače?

Temelji tudi na zgoščevanju, vendar njegovo delovanje izboljša strategija zaklepanja. Za razliko od HashTable ali Synchronized HashMap ne uporablja enake ključavnice za vsako metodo, za vsako metodo uporablja ločeno ključavnico, v ta namen uporablja blokado ponovnega vstopa. Podobno kot HashMap ima tudi ConcurrentHashMap 16 segmentov, tj. Segmente, da ustvari ConcurrentHashMap z več kot 16 vedri in ima različne konstruktorje.

Pred podrobnim pogovorom si oglejmo nekaj konceptov spodaj:

ConcurrentHashMap: Ta zemljevid omogoča sočasen dostop do niti. Med dodajanjem ali posodabljanjem zemljevida se zaklene le del zemljevida, imenovan segment, tj. Osnovna podatkovna struktura. Omogoča sočasen dostop do niti za branje podatkov brez zaklepanja. Predstavljen je bil za izboljšanje zmogljivosti.

  • Na ravni sočasnosti: To je številka, ki je ocenjeno število sočasno posodobljenih niti.
  • Faktor obremenitve: To je vrednost, ki se uporablja za nadzor faktorja spreminjanja velikosti.
  • Začetna zmogljivost: Je lastnost, ki ustvari Zemljevid z določeno velikostjo.

Oglejmo si spodnji diagram in poskusimo razumeti, kako deluje ConcurrentHashMap.

Slika - Sočasna Hashmap - Edureka

Torej v zgornjem diagramu imamo 16 ključavnic, ki zaklenejo le del zemljevida, ki je potreben za dostop do drugih metod z različnimi nitmi, s čimer se izboljša zmogljivost.

Podobno kot HashMap tudi ConcurrentHashMap deluje na podoben način, saj privzeto vsebuje 16 segmentov in shranjuje elemente s zgoščevanjem, tako da se elementi, če imajo enak zgoščevalni znak, shranijo v isti segment, kot je prikazano na zgornjem diagramu s pomočjo povezanega seznama.

Nadaljujemo s tem člankom o Concurrent Hash Map v Javi

Razlika med ConcurrentHashMap in HashMap

HashMap spada v zbirke, medtem ko ConcurrentHashMap spada v Concurrent Collections, vendar med njimi obstajajo številne druge razlike.

  • ConcurrentHashMap jeNavoj varen, tjsinhroniziran, vendar HashMap ni sinhroniziran.
  • ConcurrentHashMap ima nizko zmogljivost, ker je sinhroniziran, ker morajo včasih niti počakati, HashMap pa je zelo zmogljiv, ker ni sinhroniziran in lahko do njega istočasno dostopajo vse niti.
  • ConcurrentModificationException bomo dobili, če dve niti istočasno poskušata spremeniti ali dodati vsebino predmeta. Vendar v primeru ConcurrentHashMap med isto operacijo ne bomo dobili nobene izjeme.

  • Ničelne vrednosti so dovoljene za ključ in vrednosti v HashMapu, vendar ConcurrentHashMap ne dovoli ničelnih vrednosti za ključ in vrednost, ki jo je poskušal dodati ničelno vrednost, dobili bomo izjemo, tj. NullPointerException.

  • HashMap je uveden v JDK 1.2, medtem ko je ConcurrentHashMap uveden v JDK 1.5.

Kot smo že videli za boljše delovanje, je sestavljen iz niza vozlišč kot vedrov tabel, ki so bili segmenti tabel pred Java 8 .

Segmenti se leno inicializirajo, ko je izvedeno prvo vstavljanje. Vsako vedro lahko zaklenete samostojno tako, da zaklenete prvo vozlišče vedra, prav tako bralne operacije ne blokirajo.

V primerjavi s HashMap, ConcurrentHashMap zagotavlja dodatno concurrencyLevel argument za nadzor števila ocenjenih niti za uporabo.

Konstruktorji:

  1. ConcurrentHashMap m = novo ConcurrentHashMap ()

    Ustvari se nov prazen zemljevid s privzeto začetno zmogljivostjo 16, faktorjem obremenitve 0,75 in stopnjo sočasnosti 16.

  2. ConcurrentHashMap m = novo ConcurrentHashMap (int začetna zmogljivost)
    Ustvari se nov prazen zemljevid z določeno začetno zmogljivostjo, faktorjem obremenitve 0,75 in stopnjo sočasnosti 16.

  3. ConcurrentHashMap m = novo ConcurrentHashMap (int začetna zmogljivost, float loadFactor)

    Ustvari se nov prazen zemljevid z določeno začetno zmogljivostjo in faktorjem obremenitve s stopnjo sočasnosti 16.

    kakšna je razlika med preobremenitvijo in preglasitvijo
  4. ConcurrentHashMap m = novo ConcurrentHashMap (int InitiCapacity, float loadFactor, int concurrencyLevel)
    Ustvari se nov prazen zemljevid z določeno začetno zmogljivostjo, faktorjem obremenitve in stopnjo sočasnosti.

  5. ConcurrentHashMap m = novo ConcurrentHashMap (zemljevid m)
    Ustvari nov ConcurrentHashMap iz ponujenega zemljevida.

Druga dva argumenta: InitiCapacity in loadFactor sta delovala povsem enako kot HashMap.
ConcurrentMap je pomnilnik, skladen pri operacijah ključ / vrednost v okolju z več nitmi.

Nadaljujemo s tem člankom o Concurrent Hash Map v Javi

Pasti

Med pridobivanjem predmetov ConcurrentHashMap ni blokiran in se lahko prekriva z operacijami posodabljanja, zato za boljše delovanje pridobijo le zadnje opravljene operacije posodabljanja.

Rezultati skupnih metod stanja, vključno z velikostjo, isEmpty in containsValue, so običajno koristni le, če na zemljevidu v drugih nitih ne potekajo sočasne posodobitve.

Če so sočasne posodobitve pravilno nadzorovane, so lahko te metode stanja zanesljive.

Čeprav te metode ne zagotavljajo sproti.

Privzeta zmogljivost tabele je 16, vendar jo lahko spremenimo na ravni sočasnosti.

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

Če morajo biti ključi ključev razvrščeni po vrstnem redu, lahko uporabimo ConcurrentSkipListMap.

Zdaj po izvedbi zgornjega programa bi razumeli Concurrent Hash Map v Javi. Tako smo prišli do konca tega članka o Če želite izvedeti več, si oglejte , zaupanja vredno podjetje za spletno učenje. Edurekin tečaj za usposabljanje in certificiranje Java J2EE in SOA je zasnovan tako, da vas usposobi za temeljne in napredne koncepte Java, skupaj z različnimi Java okviri, kot sta Hibernate & Spring.

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje tega članka in odgovorili vam bomo v najkrajšem možnem času.