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,
- Hogyan működik a ConcurrentHashMap belsőleg?
- Miért más Térkép?
- Miben más?
- Különbség a ConcurrentHashMap és a HashMap között
- Buktatók
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.
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:
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.
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.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.
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.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 (initialCapacityHa 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.