Quelle est la différence entre un ConcurrentHashMap et un Hashtable en Java ?
Laquelle est la plus efficace pour les applications threadées ?
Quelle est la différence entre un ConcurrentHashMap et un Hashtable en Java ?
Laquelle est la plus efficace pour les applications threadées ?
Mécanisme de verrouillage de ConcurrentHashMap et Hashtable
Hashtable
appartient au cadre de la collection ; ConcurrentHashMap
appartient à la structure Executor.Hashtable
utilise serrure simple pour l'ensemble des données. ConcurrentHashMap
utilise serrures multiples au niveau du segment (16 par défaut) au lieu du niveau de l'objet, c'est-à-dire au niveau de l'ensemble de l'entreprise. Map
.ConcurrentHashMap
Le verrouillage n'est appliqué que pour les mises à jour. Dans le cas des récupérations, il permet une concurrence totale, les récupérations reflètent les résultats des opérations de mise à jour les plus récentes. Ainsi, les lectures peuvent être très rapides alors que les écritures sont effectuées avec un verrou.ConcurrentHashMap
ne lance pas un ConcurrentModificationException
si un thread tente de le modifier alors qu'un autre est en train d'itérer sur lui et n'autorise pas les valeurs nulles.ConcurrentHashMap
renvoie à Iterator
qui est sûr (c'est-à-dire que l'itérateur fera une copie de la structure de données interne) en cas de modification simultanée.ConcurrentHashMap
utilise une logique d'éclatement de la base de données ( Segment<K, V>[] segments
) est connu sous le nom de Niveau de concordance c'est-à-dire qu'il divise les données en fragments (segments) et place des verrous sur chaque fragment (segment) au lieu de placer un seul verrou sur l'ensemble des données ( Map
). La valeur par défaut est 16.Pour comprendre le ConcurrentHashMap de manière plus technique, veuillez regarder ceci lien
L'analogie suivante vous aide à comprendre le concept seulement (pas la logique).
Hashtable
y ConcurrentHashMap
Il existe deux types de foyers.Hashtable
verrouille la porte principale de la maison.ConcurrentHashMap
verrouille la porte d'une pièce spécifique au lieu de la porte principale.Laquelle est la plus efficace pour les applications threadées ?
ConcurrentHashMap
est plus efficace pour les applications threadées.
ConcurrentHashMap
utilise de multiples buckets pour stocker les données. Cela permet d'éviter les verrous de lecture et d'améliorer considérablement les performances par rapport à un système de gestion des données de type HashTable
. Les deux sont thread safe, mais il y a des gains de performance évidents avec ConcurrentHashMap
.
Lorsque vous lisez à partir d'un ConcurrentHashMap
en utilisant get()
il n'y a pas de serrures, contrairement à la HashTable
pour laquelle toutes les opérations sont simplement synchronisées. HashTable
a été publié dans les anciennes versions de Java alors que ConcurrentHashMap
est un truc de Java 5+.
HashMap
est la meilleure chose à utiliser dans une application à un seul fil.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.