Wat is het verschil tussen een ConcurrentHashMap en een hash in Java?
Dat is efficiënter voor threaded applicaties?
Antwoord 1, Autoriteit 100%
ConcurrentHashMap
gebruikt 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 ConcurrentHashMap
met get()
, zijn er geen sluizen, in tegenstelling tot de Hashtable
waarvoor alle operaties zijn gewoon gesynchroniseerd.
Hashtable
werd uitgebracht in oude versies van Java, terwijl ConcurrentHashMap
is een java 5+ ding.
HashMap
is het beste om het gebruik in een single threaded applicatie.
Antwoord 2, autoriteit 96%
ConcurrentHashMap en hash grendelmechanisme
Hashtable
wordt behoort tot de collectie kader;ConcurrentHashMap
behoort tot de executeur kader.Hashtable
toepassingen enkel slot voor de hele data.ConcurrentHashMap
toepassingen meerdere sloten segmentsniveau (16 standaard) in plaats van objectniveau d.w.z. geheleMap
.ConcurrentHashMap
vergrendeling 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.ConcurrentHashMap
niet gooienConcurrentModificationException
als één thread probeert te wijzigen terwijl een andere itereren over en niet nulwaarden toe.ConcurrentHashMap
retourneertIterator
, die faalveilig is (d.w.z. iterator maakt een kopie van de interne gegevensstructuur) bij gelijktijdige wijziging.ConcurrentHashMap
gebruikt 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
Hashtable
enConcurrentHashMap
twee typen Homes zijn. Hashtable
vergrendelt de voordeur van het huis.ConcurrentHashMap
vergrendelt een specifieke kamerdeur in plaats van de hoofddeur.
Wat is efficiënter voor toepassingen met schroefdraad?
ConcurrentHashMap
is efficiënter voor toepassingen met threads.