Hogyan lehet a legjobban megvalósítani az egyidejű hash térképet a Java-ban?



Ez a cikk bemutatja a Java-ban egyidejű Hash Map néven elnevezett fogalmat, és gyakorlati bemutatóval követi

Ez a cikk bemutatja a Concurrent Hash Map In nevű fogalmat és kövesse gyakorlati bemutatóval. Ez a cikk a következő mutatókkal foglalkozik,

Folytatás ezzel a cikkel a Java egyidejű hash térképéről





Hogyan működik a ConcurrentHashMap belsőleg?

A Java 5-től kezdődően a ConcurrentHashMap kerül bevezetésre a HashTable alternatívájaként. Szinkronizált térképet is kaphatunk a synchronizedMap () nevű segédprogram osztályú módszerrel, de ennek a módszernek van hátránya, vagyis nagyon gyenge teljesítmény, mivel egyszerre csak egyetlen szál férhet hozzá. Tehát a ConcurrentHashMap foglalkozik ezekkel a kérdésekkel.



Folytatás ezzel a cikkel a Java egyidejű hash térképéről

Miért más Térkép?

Annak ellenére, hogy már van HashMap, HashTable, akkor amire szükségünk van a ConcurrentHashMap-ra, azért van, mert jobb teljesítményt nyújt, ugyanakkor szálbiztos.

milyen korlátok vannak az sql-ben

Folytatás ezzel a cikkel a Java egyidejű hash térképéről



Miben más?

A hash-on is alapul, de a zárolási stratégiája javítja a teljesítményét. A HashTable-től vagy a Synchronized HashMap-tól eltérően nem alkalmazza ugyanazt a zárat az egyes módszerekre, minden módszerhez külön zárat használ, erre a célra az új belépő zárat használja. Hasonlóan a HashMap-hoz, a ConcurrentHashMap-nak is 16 vödör, azaz szegmense van, a ConcurrentHashMap létrehozásához több mint 16 vödörrel különböző konstruktorokkal rendelkezik.

Mielőtt részletesen beszélnénk, tekintsük át az alábbiakban néhány fogalmat:

ConcurrentHashMap: Ez a térkép egyidejű szálhozzáférést tesz lehetővé. A térkép csak egy része, az úgynevezett szegmens, azaz az alapul szolgáló adatszerkezet zárolódik a térkép hozzáadása vagy frissítése közben. Lehetővé teszi a szálak egyidejű hozzáférését az adatok zárolás nélküli olvasásához. A teljesítmény javítása érdekében vezették be.

  • Egyidejűségi szint: Ez egy szám, amely az egyidejűleg frissülő szálak becsült száma.
  • Terhelési tényező: Ez az érték az átméretezési tényező szabályozására szolgál.
  • Kezdeti kapacitás: Ez egy tulajdonság, amely létrehozza a megadott méretű Térképet.

Lássuk az alábbi ábrát, és próbáljuk megérteni a ConcurrentHashMap működését.

Kép- Párhuzamos hasmap- Edureka

Tehát a fenti ábrán 16 zár van, amelyek a térképnek csak egy részét rögzítik, amely szükséges ahhoz, hogy más módszerek különböző szálakkal érhetők el, ezáltal javítva a teljesítményt.

A HashMap-hoz hasonlóan a ConcurrentHashMap is hasonló módon működik, alapértelmezés szerint 16 szegmenst tartalmaz, és kivonatolással tárolja az elemet, így ha az elemeknek ugyanaz a hash-ja, akkor ugyanabban a szegmensben vannak tárolva, mint a fenti ábrán látható a csatolt lista segítségével.

Folytatás ezzel a cikkel a Java egyidejű hash térképéről

Különbség a ConcurrentHashMap és a HashMap között

A HashMap a Gyűjteményekhez tartozik, míg a ConcurrentHashMap az Egyidejű Gyűjteményekhez, azonban sok más különbség van közöttük.

  • A ConcurrentHashMapMenetbiztos, azazszinkronizált, de a HashMap nincs szinkronizálva.
  • A ConcurrentHashMap teljesítménye alacsony, mert szinkronizálva van, mert néha a szálaknak várniuk kell, de a HashMap teljesítménye magas, mivel nincs szinkronizálva, és bármely szál egyszerre fér hozzá.
  • A ConcurrentModificationException-t akkor kapjuk meg, ha két szál egyszerre próbálja módosítani vagy hozzáadni az Object tartalmát. A ConcurrentHashMap esetében azonban nem kapunk kivételt ugyanazon művelet végrehajtása közben.

  • A HashMap kulcsokhoz és értékekhez nem engedélyezett értékek, azonban a ConcurrentHashMap nem engedélyezi a kulcs nullértékét és az értékét, amelyet megpróbált nullértékkel hozzáadni, kivételt fogunk kapni, azaz NullPointerException.

  • A HashMap a JDK 1.2-ben, míg a ConcurrentHashMap a JDK 1.5-ben van bevezetve.

Amint azt a jobb teljesítmény érdekében korábban láthattuk, csomópontok tömbjéből áll, mint asztali vödrök, amelyek a Java 8 .

hogyan állítsuk be az osztályútvonalat a Windows 10 rendszerben

Az első behelyezéskor a vödrök lustán inicializálódnak. Minden vödör önállóan lezárható a vödör első csomópontjának lezárásával, és az olvasási műveletek sem blokkolják.

Összehasonlítva HashMap, ConcurrentHashMap biztosítja az extrát concurrencyLevel argumentum a becsült felhasználandó szálak számának ellenőrzésére.

Kivitelezők:

  1. ConcurrentHashMap m = új ConcurrentHashMap ()

    Új üres térkép jön létre, amelynek alapértelmezett kezdeti kapacitása 16, terhelési tényezője 0,75 és egyidejűségi szintje 16.

  2. ConcurrentHashMap m = új ConcurrentHashMap (int kezdeti kapacitás)
    Új üres térkép jön létre meghatározott kezdeti kapacitással, 0,75 terhelési tényezővel és 16 egyidejűségi szinttel.

  3. ConcurrentHashMap m = új ConcurrentHashMap (int kezdetiCapacity, float loadFactor)

    Új üres térkép jön létre egy meghatározott kezdeti kapacitással és terhelési tényezővel, a 16-os párhuzamossági szinttel.

  4. ConcurrentHashMap m = új ConcurrentHashMap (int kezdeti kapacitás, úszó terhelés tényező, int egyidejűség szint)
    Új üres térkép jön létre meghatározott kezdeti kapacitással, terhelési tényezővel és egyidejűségi szinttel.

  5. ConcurrentHashMap m = új ConcurrentHashMap (Map m)
    Új ConcurrentHashMap-ot hoz létre a megadott térképről.

A másik két érv: a kezdeti kapacitás és a loadFactor ugyanúgy működött, mint a HashMap.
A ConcurrentMap memória konzisztens a kulcs / érték műveletekkel egy többszálas környezetben.

Folytatás ezzel a cikkel a Java egyidejű hash térképéről

egy tömb javascript-hossza

Buktatók

Az objektumok lekérése közben a ConcurrentHashMap nincs blokkolva, és átfedésben lehet a frissítési műveletekkel, így a jobb teljesítmény érdekében csak a legutóbb befejezett frissítési műveleteket töltik le.

Az összesített állapot-módszerek eredményei, beleértve a méretet, az isEmpty és a tartalmazzaValue értékeket, általában csak akkor hasznosak, ha egy térképen nem zajlik egyidejű frissítés más szálakban.

Ha az egyidejű frissítéseket megfelelően ellenőrzik, ezek az állapotmódszerek megbízhatóak lehetnek.

Bár ezek a módszerek nem garantálják valós időben.

Az alapértelmezett táblakapacitás 16, azonban a párhuzamossági szint használatával megváltoztathatjuk.

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

Ha a kulcsoknak sorrendben kell lenniük, akkor használhatjuk a ConcurrentSkipListMap programot.

A fenti program végrehajtása után megértette volna a Java egyidejű hash térképét. Így ennek a cikknek a végére értünk, ha többet szeretne megtudni, nézze meg a , egy megbízható online tanulási társaság. Az Edureka Java J2EE és SOA képzési és tanúsítási tanfolyamát arra tervezték, hogy mind az alapvető, mind a fejlett Java koncepciókra kiképezzen különféle Java keretrendszereket, például a Hibernate & Spring.

Van egy kérdésünk? Kérjük, említse meg a cikk megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.