88 votes

ConcurrentHashMap et Hashtable en Java

Quelle est la différence entre un ConcurrentHashMap et un Hashtable en Java ?

Laquelle est la plus efficace pour les applications threadées ?

173voto

premraj Points 120

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).

  • Supposons que 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.

125voto

Lucas Holt Points 909

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.com

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.

Powered by:

X