ConcurrentHashMap en Hash in Java [tweevoud]

Wat is het verschil tussen een ConcurrentHashMap en een hash in Java?

Dat is efficiënter voor threaded applicaties?


Antwoord 1, Autoriteit 100%

ConcurrentHashMapgebruikt meerdere emmers opslaan van gegevens. Dit voorkomt lezen sloten en sterk verbetert prestaties over een Hashtable. Beide zijn thread safe, maar er zijn duidelijke prestatie wint met ConcurrentHashMap.

Wanneer je leest uit een ConcurrentHashMapmet get(), zijn er geen sluizen, in tegenstelling tot de Hashtablewaarvoor alle operaties zijn gewoon gesynchroniseerd.
Hashtablewerd uitgebracht in oude versies van Java, terwijl ConcurrentHashMapis een java 5+ ding.

HashMapis het beste om het gebruik in een single threaded applicatie.


Antwoord 2, autoriteit 96%

ConcurrentHashMap en hash grendelmechanisme

  • Hashtablewordt behoort tot de collectie kader; ConcurrentHashMapbehoort tot de executeur kader.
  • Hashtabletoepassingen enkel slot voor de hele data. ConcurrentHashMaptoepassingen meerdere sloten segmentsniveau (16 standaard) in plaats van objectniveau d.w.z. gehele Map.
  • ConcurrentHashMapvergrendeling wordt alleen toegepast voor updates. In het geval van opvragingen, kan de volledige concurrency, opvragingen weerspiegelen de resultaten van de meest recent voltooide updatebewerkingen. Zo leest kan heel snel gebeuren terwijl writes worden uitgevoerd met een slot.
  • ConcurrentHashMapniet gooien ConcurrentModificationExceptionals één thread probeert te wijzigen terwijl een andere itereren over en niet nulwaarden toe.
  • ConcurrentHashMapretourneert Iterator, die faalveilig is (d.w.z. iterator maakt een kopie van de interne gegevensstructuur) bij gelijktijdige wijziging.
  • ConcurrentHashMapgebruikt een logica van databaseshards (Segment<K, V>[] segments) staat bekend als Concurrency-Level, dwz verdeelt de gegevens in shards (segmenten) plaatsen vervolgens vergrendelingen op elke shard (segment) in plaats van een enkele vergrendeling voor hele gegevens (Map). De standaardwaarde is 16.

Bekijk deze link om de ConcurrentHashMap meer technisch te begrijpen

De volgende analogie helpt je alleen het concept te begrijpen (niet logisch)

  • Stel dat Hashtableen ConcurrentHashMaptwee typen Homes zijn.
  • Hashtablevergrendelt de voordeur van het huis.
  • ConcurrentHashMapvergrendelt een specifieke kamerdeur in plaats van de hoofddeur.

Wat is efficiënter voor toepassingen met schroefdraad?

ConcurrentHashMapis efficiënter voor toepassingen met threads.

Other episodes