Kā vislabāk ieviest vienlaicīgo Hash karti Java?



Šis raksts jūs iepazīstinās ar jēdzienu, kas tiek saukts par Java vienlaicīgo hash karti, un sekos tam praktiskā demonstrācijā

Šis raksts jūs iepazīstinās ar jēdzienu, ko sauc par Vienlaicīgu Hash Map In un sekojiet tam praktiskā paraugdemonstrējumā. Šajā rakstā tiks aplūkoti nākamie norādījumi,

Turpinot šo rakstu par Java vienlaicīgo hash karti





Kā ConcurrentHashMap darbojas iekšēji?

Sākot ar Java 5, ConcurrentHashMap tiek ieviests kā alternatīva HashTable. Mēs varam arī iegūt sinhronizētu karti, izmantojot lietderības klases metodi, ko sauc par synchronizedMap (), taču šai metodei ir trūkums, tas ir, ļoti slikta veiktspēja, jo vienlaikus tai var piekļūt tikai viens pavediens. Tātad ConcurrentHashMap risina šos jautājumus.



Turpinot šo rakstu par Java vienlaicīgo hash karti

Kāpēc cita karte?

Kaut arī mums jau ir HashMap, HashTable, kas ir nepieciešama ConcurrentHashMap, tas ir tāpēc, ka tas nodrošina labāku veiktspēju, tajā pašā laikā tas ir drošs ar pavedieniem.

Turpinot šo rakstu par Java vienlaicīgo hash karti



Kā tas ir savādāk?

Tas ir balstīts arī uz jaukšanu, bet tā veiktspēju uzlabo bloķēšanas stratēģija. Atšķirībā no HashTable vai Synchronized HashMap, tā nepiemēro vienu un to pašu atslēgu katrai metodei, un katrai metodei tā izmanto atsevišķu slēdzeni. Šim nolūkam tā izmanto atkārtotu dalībnieku bloķēšanu. Līdzīgi kā HashMap, arī ConcurrentHashMap ir 16 segmenti, t.i., segmenti, lai izveidotu ConcurrentHashMap ar vairāk nekā 16 segmentiem, tam ir dažādi konstruktori.

Pirms sīki runājam, pārskatiet dažus tālāk minētos jēdzienus:

ConcurrentHashMap: Šī karte ļauj vienlaicīgi piekļūt pavedieniem. Kartes pievienošanas vai atjaunināšanas laikā tiek bloķēta tikai tā kartes daļa, ko sauc par segmentu, t.i., pamatā esošo datu struktūru. Tas ļauj vienlaicīgi piekļūt pavedienam, lai nolasītu datus bez bloķēšanas. Tas tika ieviests, lai uzlabotu veiktspēju.

  • Vienlaicīguma līmenis: Tas ir skaitlis, kas ir aptuvens vienlaicīgi atjaunināto pavedienu skaits.
  • Slodzes koeficients: tā ir vērtība, ko izmanto, lai kontrolētu izmēra maiņas koeficientu.
  • Sākotnējā ietilpība: tā ir īpašība, kas izveido karti ar norādīto izmēru.

Apskatīsim zemāk redzamo diagrammu un mēģināsim saprast, kā darbojas ConcurrentHashMap.

Attēls- Vienlaicīgi Hašmaps- Edureka

Tātad iepriekšminētajā diagrammā mums ir 16 slēdzenes, kas bloķē tikai nepieciešamo kartes daļu, lai citām metodēm varētu piekļūt ar dažādiem pavedieniem, tādējādi uzlabojot veiktspēju.

Līdzīgi kā HashMap, ConcurrentHashMap darbojas līdzīgi, pēc noklusējuma satur 16 segmentus un elementu saglabā, jaucot, tāpēc, ja elementiem ir tāda pati jaukšana, tie tiek glabāti tajā pašā segmentā, kā parādīts diagrammā iepriekš, izmantojot saistīto sarakstu.

Turpinot šo rakstu par Java vienlaicīgo hash karti

Starpība starp ConcurrentHashMap un HashMap

HashMap pieder kolekcijām, savukārt ConcurrentHashMap pieder vienlaicīgām kolekcijām, tomēr starp tām ir daudz citu atšķirību.

  • ConcurrentHashMap irVītnei drošs, t.i.sinhronizēts, bet HashMap nav sinhronizēts.
  • ConcurrentHashMap veiktspēja ir zema, jo tā ir sinhronizēta, jo dažreiz pavedieniem ir jāgaida, bet HashMap ir augsts veiktspējas līmenis, jo tas nav sinhronizēts, un visi pavedieni tam var piekļūt vienlaikus.
  • Mēs iegūsim ConcurrentModificationException, ja divi pavedieni vienlaikus mēģina modificēt vai pievienot objekta saturu. Tomēr ConcurrentHashMap gadījumā mēs nesaņemsim nevienu izņēmumu, veicot vienu un to pašu darbību.

  • HashMap atslēgai un vērtībām nav atļautas vērtības, taču ConcurrentHashMap neatļauj atslēgas un vērtību, kuras mēģināja pievienot nulles vērtību, nulles vērtības, mēs iegūsim izņēmumu, ti, NullPointerException.

  • HashMap ir ieviests JDK 1.2, bet ConcurrentHashMap ir ieviests JDK 1.5.

Kā jau iepriekš redzējām labākas veiktspējas nodrošināšanai, tas sastāv no mezglu masīva kā galda spaiņiem, kas bija tabulas segmenti pirms Java 8 .

Spaiņi tiek slinki inicializēti, kad tiek veikta pirmā ievietošana. Katru kausu var bloķēt neatkarīgi, bloķējot kausa pirmo mezglu, arī nebloķē lasīšanas darbības.

Salīdzinot ar HashMap, ConcurrentHashMap nodrošina papildus concurrencyLevel arguments, lai kontrolētu izmantojamo aptuveno pavedienu skaitu.

Konstruktori:

  1. ConcurrentHashMap m = jauns ConcurrentHashMap ()

    Tiek izveidota jauna tukša karte ar noklusējuma sākotnējo jaudu 16, slodzes koeficientu 0,75 un vienlaicīguma līmeni 16.

  2. ConcurrentHashMap m = jauns ConcurrentHashMap (int sākotnējā kapacitāte)
    Tiek izveidota jauna tukša karte ar noteiktu sākotnējo ietilpību, slodzes koeficientu 0,75 un 16. vienlaicības līmeni.

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

    Tiek izveidota jauna tukša karte ar noteiktu sākotnējo jaudu un slodzes koeficientu ar 16. vienlaicības līmeni.

  4. ConcurrentHashMap m = jauns ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Tiek izveidota jauna tukša karte ar noteiktu sākotnējo jaudu, slodzes koeficientu un vienlaicīguma līmeni.

  5. ConcurrentHashMap m = jauns ConcurrentHashMap (Karte m)
    No izveidotās kartes izveido jaunu ConcurrentHashMap karti.

Pārējie divi argumenti: initialCapacity un loadFactor darbojās gluži tāpat kā HashMap.
ConcurrentMap ir atmiņa, kas atbilst atslēgu / vērtību operācijām vairāku pavedienu vidē.

Turpinot šo rakstu par Java vienlaicīgo hash karti

Kļūdas

Objektu izgūšanas laikā ConcurrentHashMap nav bloķēts un var pārklāties ar atjaunināšanas darbībām, tādējādi labākai veiktspējai viņi izgūst tikai pēdējās pabeigtās atjaunināšanas darbības.

Apkopoto statusa metožu rezultāti, ieskaitot izmēru, isEmpty un tartalmazValue, parasti ir noderīgi tikai tad, ja kartē netiek veikti vienlaicīgi citu pavedienu atjauninājumi.

kas ir Salesforce pakalpojumu mākonis

Ja vienlaicīgie atjauninājumi tiek kontrolēti pareizi, šīs statusa metodes var būt uzticamas.

Lai gan šīs metodes negarantē reāllaikā.

Noklusējuma tabulas ietilpība ir 16, taču mēs to varam mainīt, izmantojot vienlaicīguma līmeni.

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

Ja atslēgām ir jābūt sakārtotām, mēs varam izmantot ConcurrentSkipListMap.

Tagad pēc iepriekš minētās programmas izpildes jūs būtu sapratis Java vienlaicīgo hash karti. Tādējādi mēs esam nonākuši šī raksta beigās. Ja vēlaties uzzināt vairāk, pārbaudiet , uzticams tiešsaistes mācību uzņēmums. Edureka Java J2EE un SOA apmācības un sertifikācijas kurss ir paredzēts, lai apmācītu jūs gan galvenajiem, gan uzlabotajiem Java jēdzieniem kopā ar dažādiem Java ietvariem, piemēram, Hibernate & Spring.

Vai mums ir jautājums? Lūdzu, pieminējiet to šī raksta komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.