Kaip geriausiai įgyvendinti lygiagrečią „Hash“ žemėlapį „Java“?



Šis straipsnis supažindins jus su koncepcija, vadinama „Java“ lygiagrečiu maišos žemėlapiu, ir pateiksite praktinę demonstraciją

Šis straipsnis supažindins jus su sąvoka, vadinama „Concurrent Hash Map In“ ir atlikite praktinę demonstraciją. Toliau pateikiami patarimai bus aprašyti šiame straipsnyje,

Toliau einant su šiuo straipsniu apie „Java“ lygiagrečią „Hash Map“





Kaip „ConcurrentHashMap“ veikia viduje?

Nuo „Java 5“ „ConcurrentHashMap“ pristatoma kaip „HashTable“ alternatyva. Taip pat galime gauti sinchronizuotą žemėlapį naudodami naudingumo klasės metodą, vadinamą synchronizedMap (), tačiau yra šio metodo trūkumas, t. Y. Labai prastas našumas, nes vienu metu prie jo gali prisijungti tik viena gija. Taigi „ConcurrentHashMap“ sprendžia šias problemas.



Toliau einant su šiuo straipsniu apie „Java“ lygiagrečią „Hash Map“

Kodėl kitas žemėlapis?

Nors mes jau turime „HashMap“, „HashTable“, tai ko reikia „ConcurrentHashMap“, todėl, kad jis užtikrina geresnį našumą ir yra saugus siūlams.

Toliau einant su šiuo straipsniu apie „Java“ lygiagrečią „Hash Map“



Kuo jis kitoks?

Jis taip pat pagrįstas maišymu, tačiau jo veikimą pagerina jo užrakinimo strategija. Skirtingai nuo „HashTable“ ar „Synchronized HashMap“, jis netaiko to paties užrakto kiekvienam metodui, kuriam kiekvienam metodui naudoja atskirą užraktą. Tam jis naudoja pakartotinio užrakto užraktą. Panašiai kaip „HashMap“, „ConcurrentHashMap“ turi 16 segmentų, t. Y. Segmentus. Norėdami sukurti „ConcurrentHashMap“ su daugiau nei 16 grupių, jis turi skirtingus konstruktorius.

java kaip naudotis iteratoriumi

Prieš kalbėdami išsamiai, apžvelkime keletą toliau pateiktų sąvokų:

„ConcurrentHashMap“: šis žemėlapis leidžia vienu metu pasiekti gijas. Tik dalis žemėlapio, vadinamo segmentu, t. Y. Pagrindinė duomenų struktūra, užrakinama pridedant ar atnaujinant žemėlapį. Tai leidžia vienu metu pasiekti giją, kad būtų galima nuskaityti duomenis neužrakinant. Jis buvo pristatytas siekiant pagerinti našumą.

  • Lygiagretumo lygis: Tai skaičius, kuris yra numatomas tuo pačiu metu atnaujinamų gijų skaičius.
  • Apkrovos faktorius: Tai vertė, naudojama valdyti dydžio keitimo koeficientą.
  • Pradinis pajėgumas: Tai savybė, sukurianti nurodyto dydžio žemėlapį.

Pažiūrėkime žemiau pateiktą schemą ir pabandykime suprasti, kaip veikia „ConcurrentHashMap“.

Vaizdas- Kartu Hashmap- Edureka

Taigi aukščiau pateiktoje diagramoje turime 16 spynų, kurios užrakina tik dalį reikalingos žemėlapio, kad įvairiais siūlais būtų galima pasiekti kitus metodus ir taip pagerinti našumą.

Panašiai kaip „HashMap“, „ConcurrentHashMap“ veikia panašiai, pagal numatytuosius nustatymus yra 16 segmentų, o elementas saugomas maišant, taigi, jei elementai turi tą patį maišos, jie yra saugomi tame pačiame segmente, kaip parodyta aukščiau esančioje diagramoje su susieto sąrašo pagalba.

Toliau einant su šiuo straipsniu apie „Java“ lygiagrečią „Hash Map“

Skirtumas tarp „ConcurrentHashMap“ ir „HashMap“

„HashMap“ priklauso kolekcijoms, o „ConcurrentHashMap“ - „Kartu esančioms kolekcijoms“, tačiau tarp jų yra daugybė kitų skirtumų.

  • Yra „ConcurrentHashMap“Saugus siūlus, tsinchronizuotas, bet „HashMap“ nėra sinchronizuotas.
  • „ConcurrentHashMap“ našumas yra mažas, nes jis yra sinchronizuotas, nes kartais gijų reikia laukti, tačiau „HashMap“ našumas yra didelis, nes jis nėra sinchronizuotas ir bet kurios gijos gali jį pasiekti vienu metu.
  • Mes gausime „ConcurrentModificationException“, jei dvi gijos vienu metu bandys modifikuoti ar pridėti objekto turinį. Tačiau „ConcurrentHashMap“ atveju atlikdami tą pačią operaciją negausime jokių išimčių.

  • „HashMap“ raktams ir reikšmėms leidžiamos jokios vertės, tačiau „ConcurrentHashMap“ neleidžia nulinių rakto ir vertės, kurią bandė pridėti nulinę vertę, gausime išimtį, ty NullPointerException.

  • „HashMap“ yra pristatytas JDK 1.2, o „ConcurrentHashMap“ - JDK 1.5.

Kaip jau matėme anksčiau, siekiant geresnio našumo, jis susideda iš mazgų kaip lentelių segmentų, kurie buvo lentelės segmentai prieš „Java 8“ .

Kaušai tingiai inicijuojami, kai atliekamas pirmasis įdėjimas. Kiekvieną kibirą galima užrakinti atskirai, užrakinus pirmąjį kibiro mazgą, taip pat neužblokuojamos skaitymo operacijos.

Palyginus su „HashMap“, „ConcurrentHashMap“ suteikia papildomą lygiagretumasLygis argumentas, skirtas valdyti numatomų naudoti gijų skaičių.

Konstruktoriai:

  1. „ConcurrentHashMap“ m = naujas „ConcurrentHashMap“ ()

    Sukuriamas naujas tuščias žemėlapis, kurio numatytasis pradinis pajėgumas yra 16, apkrovos koeficientas - 0,75 ir lygiagretumo lygis - 16.

    konvertuoti datos eilutę į datą
  2. „ConcurrentHashMap“ = naujas „ConcurrentHashMap“ (int initialCapacity)
    Sukuriamas naujas tuščias žemėlapis su nurodytu pradiniu pajėgumu, apkrovos koeficientu 0,75 ir 16 lygiagretumo lygiu.

  3. „ConcurrentHashMap“ = naujas „ConcurrentHashMap“ (int initialCapacity, float loadFactor)

    Sukuriamas naujas tuščias žemėlapis su nurodytu pradiniu pajėgumu ir apkrovos koeficientu su 16 lygiavertiškumo lygiu.

  4. „ConcurrentHashMap“ = naujas „ConcurrentHashMap“ (int initialCapacity, float loadFactor, int concurrencyLevel)
    Sukuriamas naujas tuščias žemėlapis su nurodytu pradiniu pajėgumu, apkrovos koeficientu ir lygiagretumo lygiu.

  5. „ConcurrentHashMap“ = naujas „ConcurrentHashMap“ (žemėlapis m)
    Iš pateikto žemėlapio sukuria naują „ConcurrentHashMap“.

Kiti du argumentai: initialCapacity ir loadFactor veikė taip pat, kaip ir HashMap.
„ConcurrentMap“ yra atmintis, atitinkanti rakto / vertės operacijas daugialypėje aplinkoje.

Toliau einant su šiuo straipsniu apie „Java“ lygiagrečią „Hash Map“

Spąstai

Gaunant objektus, „ConcurrentHashMap“ nėra užblokuotas ir gali sutapti su naujinimo operacijomis, todėl siekiant geresnio našumo jie gauna tik paskutines baigtas atnaujinimo operacijas.

virėjas vs lėlė vs druska

Apibendrintų būsenos metodų, įskaitant dydį, „isEmpty“ ir „insideValue“, rezultatai paprastai yra naudingi tik tada, kai žemėlapis tuo pačiu metu nėra atnaujinamas kitose gijose.

Jei tuo pačiu metu atnaujinimai yra tinkamai valdomi, šie būsenos metodai gali būti patikimi.

Nors šie metodai negarantuoja realiuoju laiku.

Numatytasis lentelės talpa yra 16, tačiau mes galime ją pakeisti naudodami lygiagretumo lygį.

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

Jei raktų klavišus reikia surikiuoti, galime naudoti „ConcurrentSkipListMap“.

Dabar, atlikę minėtą programą, būtumėte supratę „Java“ lygiagrečią maišos žemėlapį. Taigi mes priėjome prie šio straipsnio pabaigos. Jei norite sužinoti daugiau, patikrinkite , patikima mokymosi internetu įmonė. „Edureka“ „Java J2EE“ ir SOA mokymo ir sertifikavimo kursai yra skirti mokyti jus tiek pagrindinėms, tiek pažangesnėms „Java“ koncepcijoms kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate & Spring“.

Turite mums klausimą? Prašau tai paminėti šio straipsnio komentarų skiltyje ir kuo greičiau susisieksime su jumis.