Kuinka toteuttaa parhaiten samanaikainen hash-kartta Java-ohjelmassa?



Tämä artikkeli esittelee sinulle konseptin, jota kutsutaan samanaikaiseksi Hash Mapiksi Javassa, ja seuraa sitä käytännön esittelyllä

Tämä artikkeli tutustuttaa sinut käsitteeseen, jota kutsutaan nimellä Concurrent Hash Map In ja seuraa sitä käytännön esittelyllä. Seuraavat ohjeet käsitellään tässä artikkelissa,

Jatketaan tämän artikkelin kanssa samanaikaisesta Hash Mapista Javalla





iteratiivinen fibonacci c ++

Kuinka ConcurrentHashMap toimii sisäisesti?

Java 5: stä lähtien ConcurrentHashMap otetaan käyttöön vaihtoehtona HashTable-sovellukselle. Voimme myös saada synkronoidun kartan käyttämällä apuohjelmaluokan menetelmää nimeltä synchronizedMap (), mutta tällä menetelmällä on haittapuoli eli erittäin huono suorituskyky, koska vain yksi ketju voi käyttää sitä kerralla. Joten ConcurrentHashMap käsittelee näitä asioita.



Jatketaan tämän artikkelin kanssa samanaikaisesta Hash Mapista Javalla

Miksi muu kartta?

Vaikka meillä on jo HashMap, HashTable, mikä on ConcurrentHashMapin tarve, se johtuu siitä, että se tarjoaa paremman suorituskyvyn ja samalla on langankestävä.

Jatketaan tämän artikkelin kanssa samanaikaisesta Hash Mapista Javalla



Kuinka se on erilainen?

Se perustuu myös hajautukseen, mutta lukitusstrategia parantaa sen suorituskykyä. Toisin kuin HashTable tai Synchronized HashMap, se ei käytä samaa lukkoa kullekin menetelmälle, vaan käyttää erillistä lukitusta kullekin menetelmälle. Se käyttää uudelleenlukijan lukitusta tähän tarkoitukseen. Samoin kuin HashMapissa, ConcurrentHashMapissa on 16 kauhaa eli segmenttejä, jotta ConcurrentHashMap voidaan luoda yli 16 kauhalla, sillä on erilaiset rakentajat.

Ennen kuin puhumme yksityiskohtaisesti, tarkastellaan muutamia alla olevia käsitteitä:

ConcurrentHashMap: Tämä kartta sallii samanaikaisen ketjun käytön. Vain osa kartasta, jota kutsutaan segmentiksi, eli taustalla oleva tietorakenne, lukittuu, kun lisäät tai päivität karttaa. Se sallii samanaikaisen langankäynnin lukea tietoja lukitsematta. Se otettiin käyttöön suorituskyvyn parantamiseksi.

  • Samanaikaisuustaso: Se on numero, joka on arvioitu määrä samanaikaisesti päivittyviä ketjuja.
  • Kuormitustekijä: Se on arvo, jota käytetään koon muuttamiseen.
  • Alkukapasiteetti: Se on ominaisuus, joka luo annetun koon kartan.

Katsotaan alla olevaa kaaviota ja yritetään ymmärtää, miten ConcurrentHashMap toimii.

Kuva- Samanaikainen Hashmap- Edureka

Joten yllä olevassa kaaviossa meillä on 16 lukkoa, jotka lukitsevat vain osan tarvittavasta kartasta, jotta muihin menetelmiin pääsee käsiksi eri säikeillä, mikä parantaa suorituskykyä.

Samoin kuin HashMap, ConcurrentHashMap toimii samalla tavalla, sillä se sisältää oletusarvoisesti 16 segmenttiä ja tallentaa elementin hajauttamalla, joten jos elementeillä on sama tiiviste, ne on tallennettu samaan segmenttiin kuin yllä olevassa kaaviossa on esitetty linkitetyn luettelon avulla.

Jatketaan tämän artikkelin kanssa samanaikaisesta Hash Mapista Javalla

Ero ConcurrentHashMapin ja HashMapin välillä

HashMap kuuluu kokoelmiin, kun taas ConcurrentHashMap kuuluu samanaikaisiin kokoelmiin, mutta niiden välillä on monia muita eroja.

  • ConcurrentHashMap onLangankestävä elisynkronoitu, mutta HashMapia ei ole synkronoitu.
  • ConcurrentHashMap on heikosti suorituskykyinen, koska se on synkronoitu, koska joskus säikeet joutuvat odottamaan, mutta HashMap on suorituskykyinen, koska sitä ei ole synkronoitu ja kaikki ketjut voivat käyttää sitä samanaikaisesti.
  • Saamme ConcurrentModificationExceptionin, jos kaksi ketjua yrittää samanaikaisesti muokata tai lisätä objektin sisältöä. ConcurrentHashMap-sovelluksen tapauksessa emme kuitenkaan saa mitään poikkeusta samalla toiminnolla.

  • Nolla-arvot ovat sallittuja avaimelle ja arvoille HashMapissa, mutta ConcurrentHashMap ei salli nolla-arvoja avaimelle ja arvolle, jota se yritti lisätä nolla-arvoon, saamme poikkeuksen eli NullPointerException.

  • HashMap otetaan käyttöön JDK 1.2: ssa, kun taas ConcurrentHashMap otetaan käyttöön JDK 1.5: ssä.

Kuten olemme aiemmin nähneet paremman suorituskyvyn saavuttamiseksi, se koostuu joukosta solmuja taulukon ämpäreinä, joka oli taulukon segmenttejä ennen Java 8 .

Kauhat alustetaan laiskasti, kun ensimmäinen lisäys suoritetaan. Jokainen kauha voidaan lukita itsenäisesti lukitsemalla kauhan ensimmäinen solmu, myös lukutoiminnot eivät estä.

Verrattuna HashMap, SamanaikainenHashMap tarjoaa ylimääräisen samanaikainen taso argumentti hallitsemaan käytettävien arvioitujen säikeiden määrää.

Rakentajat:

mitä on hankintojen hallinta
  1. ConcurrentHashMap m = uusi ConcurrentHashMap ()

    Luodaan uusi tyhjä kartta, jonka oletuskapasiteetti on 16, kuormituskerroin 0,75 ja samanaikaisuustaso 16.

  2. ConcurrentHashMap m = uusi ConcurrentHashMap (int initialCapacity)
    Luo uusi tyhjä kartta, jolla on määritelty alkukapasiteetti, kuormituskerroin 0,75 ja samanaikaisuustaso 16.

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

    Uusi tyhjä kartta luodaan määritetyllä alkukapasiteetilla ja kuormituskertoimella samanaikaisustasolla 16.

  4. ConcurrentHashMap m = uusi ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
    Uusi tyhjä kartta luodaan määritetyllä alkukapasiteetilla, kuormituskertoimella ja samanaikaisuudella.

  5. ConcurrentHashMap m = uusi ConcurrentHashMap (Kartta m)
    Luo uuden ConcurrentHashMap-kartan toimitetulta kartalta.

    fibonacci c ++: ssa

Kaksi muuta argumenttia: initialCapacity ja loadFactor toimivat melko samalla tavalla kuin HashMap.
ConcurrentMap on muisti, joka on yhdenmukainen avain / arvo-operaatioiden kanssa monisäikeisessä ympäristössä.

Jatketaan tämän artikkelin kanssa samanaikaisesta Hash Mapista Javalla

Sudenkuoppia

Objektien noutamisen aikana ConcurrentHashMap ei ole estetty ja saattaa olla päällekkäinen päivitystoimintojen kanssa, joten paremman suorituskyvyn saavuttamiseksi ne noutavat vain viimeisimmät päivitetyt toiminnot.

Tulokset yhdistetyistä tilamenetelmistä, mukaan lukien koko, isEmpty ja containsValue, ovat tyypillisesti hyödyllisiä vain, kun karttaa ei päivitetä samanaikaisesti muissa säikeissä.

Jos samanaikaisia ​​päivityksiä hallitaan oikein, nämä tilamenetelmät voivat olla luotettavia.

Vaikka nämä menetelmät eivät takaa reaaliajassa.

Oletuspöydän kapasiteetti on 16, mutta voimme muuttaa sitä samanaikaisuustasolla.

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

Jos avainten on oltava järjestyksessä, voimme käyttää ConcurrentSkipListMapia.

Nyt kun olet suorittanut yllä mainitun ohjelman, olisit ymmärtänyt samanaikaisen Hash Mapin Java-sovelluksessa. Siksi olemme päässeet tämän artikkelin loppuun, jos haluat lisätietoja, tutustu , luotettava verkko-oppimisyritys. Edurekan Java J2EE- ja SOA-koulutus- ja sertifiointikurssit on suunniteltu kouluttamaan sekä ydin- että edistyneitä Java-konsepteja sekä erilaisia ​​Java-kehyksiä, kuten Hibernate & Spring.

Onko sinulla kysymys meille? Mainitse se tämän artikkelin kommenttiosassa ja otamme sinuun yhteyttä mahdollisimman pian.