Kako najbolje primijeniti istodobnu kartu raspršivanja na Javi?

Ovaj članak upoznat će vas s konceptom koji se naziva Java istodobna karta raspršivanja u Javi i slijediti ga s praktičnom demonstracijom

Ovaj članak upoznat će vas s konceptom koji se naziva Concurrent Hash Map In i slijedite to s praktičnom demonstracijom. Slijedeći pokazivači bit će obrađeni u ovom članku,

Nastavljamo s ovim člankom o Istodobnoj heš mapi na Javi



Kako ConcurrentHashMap interno djeluje?

Od Jave 5 nadalje ConcurrentHashMap je predstavljen kao alternativa za HashTable. Također možemo dobiti sinkroniziranu mapu koristeći metodu klase korisnih programa nazvanu synchronizedMap (), ali postoji nedostatak ove metode, tj. Vrlo slabe izvedbe jer joj odjednom može pristupiti samo jedna nit. Dakle, ConcurrentHashMap rješava ove probleme.



Nastavljamo s ovim člankom o Istodobnoj heš mapi na Javi

Zašto druga karta?

Iako već imamo HashMap, HashTable, ono što je potrebno ConcurrentHashMap-u, to je zato što pruža bolje performanse, a istovremeno je i sigurno zaštićen od niti.

Nastavljamo s ovim člankom o Istodobnoj heš mapi na Javi



Kako je drugačije?

Također se temelji na raspršivanju, ali njegovu izvedbu poboljšava strategija zaključavanja. Za razliku od HashTable ili Synchronized HashMap, on ne primjenjuje isto zaključavanje na svaku metodu, koristi zasebnu bravu za svaku metodu, u tu svrhu koristi zaključavanje ponovnog ulaska. Slično HashMap-u, ConcurrentHashMap ima 16 segmenata, tj. Segmenata, da bi stvorio ConcurrentHashMap s više od 16 segmenata ima različite konstruktore.

Prije detaljnog razgovora, pregledajmo nekoliko koncepata u nastavku:

ConcurrentHashMap: Ova karta omogućuje istodobni pristup niti. Samo se dio karte koji se naziva segment, tj. Temeljna struktura podataka, zaključava tijekom dodavanja ili ažuriranja karte. Omogućuje istovremeni pristup niti za čitanje podataka bez zaključavanja. Uveden je radi poboljšanja performansi.

  • Razina istodobnosti: To je broj koji je procijenjeni broj istodobno ažurirajućih niti.
  • Faktor opterećenja: To je vrijednost koja se koristi za kontrolu faktora promjene veličine.
  • Početni kapacitet: To je svojstvo koje stvara kartu s predviđenom veličinom.

Pogledajmo donji dijagram i pokušajmo razumjeti kako ConcurrentHashMap radi.

Slika- Istodobna Hashmap- Edureka

Dakle, u gornjem dijagramu imamo 16 brava koje zaključavaju samo dio karte koji je potreban kako bi se drugim nitima moglo pristupiti različitim nitima čime se poboljšava izvedba.

Slično HashMap-u, ConcurrentHashMap djeluje na sličan način jer prema zadanim postavkama sadrži 16 segmenata i pohranjuje element raspršivanjem, pa ako elementi imaju isto raspršivanje, pohranjuju se u isti segment kao što je prikazano na gornjem dijagramu uz pomoć povezanog popisa.

Nastavljamo s ovim člankom o Istodobnoj heš mapi na Javi

Razlika između ConcurrentHashMap i HashMap

HashMap pripada Zbirkama, dok ConcurrentHashMap pripada Istodobnim Zbirkama, međutim među njima postoje mnoge druge razlike.

uska spojnica vs labava spojnica
  • ConcurrentHashMap jeNavoj siguran, tjsinkronizirano, ali HashMap nije sinkronizirano.
  • ConcurrentHashMap ima malu izvedbu jer je sinkroniziran jer ponekad niti moraju pričekati, ali HashMap ima visoku izvedbu jer nije sinkroniziran i bilo kojoj niti mogu istovremeno pristupiti.
  • Dobit ćemo ConcurrentModificationException ako dvije niti istovremeno pokušavaju izmijeniti ili dodati sadržaj Objekta. Međutim, u slučaju ConcurrentHashMap nećemo dobiti nikakvu iznimku dok izvodimo istu operaciju.

  • Nulti vrijednosti su dopuštene za ključ i vrijednosti u HashMap-u, međutim, ConcurrentHashMap ne dopušta null vrijednosti za ključ i vrijednost koju je pokušao dodati null vrijednost dobit ćemo iznimku, tj. NullPointerException.

  • HashMap je uveden u JDK 1.2, dok je ConcurrentHashMap uveden u JDK 1.5.

Kao što smo ranije vidjeli za bolje performanse, sastoji se od niza čvorova kao segmentima tablice koji su bili segmenti tablice prije Java 8 .

Segmenti se lijeno inicijaliziraju kada se izvrši prvo umetanje. Svaka se sekvenca može samostalno zaključati zaključavanjem prvog čvora segmenta, a operacije čitanja također ne blokiraju.

U usporedbi sa HashMap, ConcurrentHashMap pruža ekstra istodobnostLevel argument za kontrolu broja procijenjenih niti koje će se koristiti.

Konstruktori:

  1. ConcurrentHashMap m = novo ConcurrentHashMap ()

    Izrađuje se nova prazna karta sa zadanim početnim kapacitetom 16, faktorom opterećenja 0,75 i razinom istodobnosti 16.

  2. ConcurrentHashMap m = novi ConcurrentHashMap (int početni kapacitet)
    Izrađuje se nova prazna karta s navedenim početnim kapacitetom, faktorom opterećenja 0,75 i razinom istodobnosti 16.

    dvostruko za int u javi
  3. ConcurrentHashMap m = novi ConcurrentHashMap (int InitiCapacity, float loadFactor)

    Izrađuje se nova prazna karta s navedenim početnim kapacitetom i faktorom opterećenja s razinom istodobnosti 16.

  4. ConcurrentHashMap m = new ConcurrentHashMap (int InitiCapacity, float loadFactor, int concurrencyLevel)
    Izrađuje se nova prazna karta s navedenim početnim kapacitetom, faktorom opterećenja i razinom istodobnosti.

  5. ConcurrentHashMap m = novo ConcurrentHashMap (karta m)
    Stvara novi ConcurrentHashMap na priloženoj karti.

Druga dva argumenta: InitiCapacity i loadFactor radili su potpuno isto kao i HashMap.
ConcurrentMap je memorija konzistentna na operacijama ključ / vrijednost u okruženju s više niti.

Nastavljamo s ovim člankom o Istodobnoj heš mapi na Javi

Zamke

Dok dohvaća objekte, ConcurrentHashMap nije blokiran i može se preklapati s operacijama ažuriranja, stoga za bolju izvedbu dohvaćaju samo najnovije dovršene operacije ažuriranja.

Rezultati metoda agregatnog statusa, uključujući size, isEmpty i containsValue, obično su korisni samo ako karta ne prolazi istodobna ažuriranja u drugim nitima.

Ako se istodobnim ažuriranjima pravilno kontrolira, ove metode statusa mogu biti pouzdane.

Iako ove metode ne jamče u stvarnom vremenu.

Zadani kapacitet tablice je 16, no možemo ga promijeniti pomoću razine istodobnosti.

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

Ako se ključevi ključeva trebaju poredati, možemo koristiti ConcurrentSkipListMap.

Sada biste nakon izvršavanja gornjeg programa razumjeli Concurrent Hash Map u Javi. Tako smo došli do kraja ovog članka o Ako želite saznati više, pogledajte , pouzdana tvrtka za internetsko učenje. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA osmišljen je kako bi vas osposobio za osnovne i napredne Java koncepte, zajedno s raznim Java okvirima poput Hibernate & Spring.

Imate pitanje za nas? Molimo navedite ga u odjeljku za komentare ovog članka i javit ćemo vam se što je prije moguće.