Hvordan best implementerer samtidig Hash-kart i Java?



Denne artikkelen vil introdusere deg for et konsept kalt Concurrent Hash Map i Java og følge det opp med en praktisk demonstrasjon

Denne artikkelen vil introdusere deg for et konsept som heter Concurrent Hash Map In og følg den opp med en praktisk demonstrasjon. Følgende tips vil bli dekket i denne artikkelen,

hva er inni det__

Fortsetter med denne artikkelen på Concurrent Hash Map i Java





Hvordan fungerer ConcurrentHashMap internt?

Fra Java 5 og utover blir ConcurrentHashMap introdusert som et alternativ for HashTable. Vi kan også få et synkronisert kart ved hjelp av verktøyklassemetoden kalt synchronizedMap (), men det er en ulempe med denne metoden, dvs. svært dårlig ytelse, da bare en enkelt tråd kan få tilgang til den samtidig. Så løser ConcurrentHashMap disse problemene.



Fortsetter med denne artikkelen på Concurrent Hash Map i Java

Hvorfor annet kart?

Selv om vi allerede har HashMap, HashTable, hva er et behov for ConcurrentHashMap, er det fordi det gir bedre ytelse samtidig som det er trådsikkert.

Fortsetter med denne artikkelen på Concurrent Hash Map i Java



Hvordan er det annerledes?

Den er også basert på hashing, men ytelsen forbedres av låsestrategien. I motsetning til HashTable eller Synchronized HashMap, bruker den ikke samme lås på hver metode, den bruker en separat lås for hver metode. Den bruker re-entrant lock for dette formålet. I likhet med HashMap har ConcurrentHashMap 16 skuffer, dvs. segmenter, for å lage ConcurrentHashMap med mer enn 16 skuffer har den forskjellige konstruktører.

Før vi snakker i detalj, la oss gjennomgå noen begreper nedenfor:

ConcurrentHashMap: Dette kartet gir samtidig trådtilgang. Bare en del av kartet, kalt segment, dvs. den underliggende datastrukturen, blir låst mens du legger til eller oppdaterer kartet. Det gir samtidig trådtilgang for å lese dataene uten å låse. Den ble introdusert for å forbedre ytelsen.

  • Concurrency-Level: Det er et tall som er et estimert antall trådene som oppdateres samtidig.
  • Load-Factor: Det er en verdi som brukes til å kontrollere størrelsesfaktoren.
  • Opprinnelig kapasitet: Det er en eiendom som lager et kart med den oppgitte størrelsen.

La oss se diagrammet nedenfor og prøve å forstå hvordan ConcurrentHashMap fungerer.

Image- Samtidig Hashmap- Edureka

Så i diagrammet ovenfor har vi 16 låser som bare låser en del av kartet som kreves, slik at andre metoder kan nås av forskjellige tråder og dermed forbedrer ytelsen.

I likhet med HashMap fungerer ConcurrentHashMap på samme måte som den inneholder 16 segmenter som standard og lagrer element ved hashing, så hvis elementene har samme hash, lagres de i samme segment som vist i diagrammet ovenfor ved hjelp av den koblede listen.

implementere koblet liste i c

Fortsetter med denne artikkelen på Concurrent Hash Map i Java

Forskjellen mellom ConcurrentHashMap og HashMap

HashMap tilhører samlinger mens ConcurrentHashMap tilhører samtidige samlinger, men det er mange andre forskjeller mellom dem.

  • ConcurrentHashMap erGjengesikker dvs.synkronisert, men HashMap er ikke-synkronisert.
  • ConcurrentHashMap har lite ytelse fordi den er synkronisert fordi tråder noen ganger må vente, men HashMap har høy ytelse fordi den ikke er synkronisert og alle tråder kan få tilgang til den samtidig.
  • Vi får ConcurrentModificationException hvis to tråder samtidig prøver å endre eller legge til innhold i objektet. Imidlertid, når det gjelder ConcurrentHashMap, får vi ikke noe unntak mens vi utfører den samme operasjonen.

  • Nullverdier er tillatt for nøkkel og verdier i HashMap, men ConcurrentHashMap tillater ikke nullverdier for nøkkel og verdi det prøvde å legge til nullverdi, vi får unntak, dvs. NullPointerException.

  • HashMap er introdusert i JDK 1.2 mens ConcurrentHashMap er introdusert i JDK 1.5.

Som vi har sett tidligere for bedre ytelse, består den av en rekke noder som bordbøtter som var bordsegmenter før Java 8 .

Skuffene initialiseres lat når den første innsettingen utføres. Hver bøtte kan låses uavhengig ved å låse den første noden på bøtta, og leseoperasjoner blokkerer ikke.

Sammenlignet med HashMap, ConcurrentHashMap gir ekstra samtidighet Nivå argument for å kontrollere antall estimerte tråder som skal brukes.

Konstruktører:

  1. ConcurrentHashMap m = ny ConcurrentHashMap ()

    Et nytt tomt kart opprettes med en standard startkapasitet på 16, lastfaktor på 0,75 og samtidighetsnivå 16.

  2. ConcurrentHashMap m = ny ConcurrentHashMap (int initialCapacity)
    Et nytt tomt kart opprettes med en spesifisert startkapasitet, lastfaktor på 0,75 og samtidighetsnivå 16.

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

    Et nytt tomt kart opprettes med en spesifisert startkapasitet og lastfaktor med samtidighetsnivå 16.

  4. ConcurrentHashMap m = ny ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Et nytt tomt kart opprettes med spesifisert startkapasitet, lastfaktor og samtidighetsnivå.

  5. ConcurrentHashMap m = ny ConcurrentHashMap (Map m)
    Oppretter nytt ConcurrentHashMap fra det medfølgende kartet.

De to andre argumentene: initialCapacity og loadFactor fungerte ganske det samme som HashMap.
ConcurrentMap er minne som er konsistent på nøkkel- / verdioperasjoner i et miljø med flere tråder.

Fortsetter med denne artikkelen på Concurrent Hash Map i Java

Fallgruver

Mens du henter objekter er ikke ConcurrentHashMap blokkert og kan overlappe med oppdateringsoperasjoner, og for bedre ytelse henter de bare de siste fullførte oppdateringsoperasjonene.

Resultater av aggregerte statusmetoder inkludert størrelse, er tom og inneholder verdi er vanligvis bare nyttige når et kart ikke gjennomgår samtidige oppdateringer i andre tråder.

Hvis samtidige oppdateringer kontrolleres riktig, kan disse statusmetodene være pålitelige.

Selv om disse metodene ikke garanterer i sanntid.

hva er et navneområde c ++

Standard tabellkapasitet er 16, men vi kan endre den ved hjelp av samtidighetsnivå.

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

Hvis det kreves at nøklene er i sortert rekkefølge, kan vi bruke ConcurrentSkipListMap.

Nå etter å ha utført programmet ovenfor, ville du ha forstått Concurrent Hash Map i Java. Dermed har vi kommet til en slutt på denne artikkelen om Hvis du ønsker å lære mer, sjekk ut , et pålitelig online læringsfirma. Edurekas Java J2EE- og SOA-opplærings- og sertifiseringskurs er designet for å trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Spring.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet i denne artikkelen, og vi vil kontakte deg så snart som mulig.