ConcurrentHashMap et Hashtable en Java

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

Quel est le plus efficace pour les applications filetées?

ConcurrentHashMap utilise plusieurs compartiments pour stocker des données. Cela évite les verrous de lecture et améliore considérablement les performances par rapport à une HashTable . Les deux sont thread-safe, mais il y a des gains de performances évidents avec ConcurrentHashMap .

Lorsque vous lisez depuis un ConcurrentHashMap aide de get() , il n’y a pas de verrou, contrairement à HashTable pour lequel toutes les opérations sont simplement synchronisées. HashTable est sorti dans les anciennes versions de Java alors que ConcurrentHashMap est une chose java 5+.

HashMap est la meilleure chose à utiliser dans une seule application threadée.

Mécanisme de locking ConcurrentHashMap et Hashtable

  • Hashtable appartient au framework Collection; ConcurrentHashMap appartient au framework Executor.
  • Hashtable utilise un seul verrou pour des données complètes. ConcurrentHashMap utilise plusieurs verrous au niveau du segment (16 par défaut) au lieu du niveau de l’object, c’est-à-dire de la Map entière.
  • ConcurrentHashMap locking ConcurrentHashMap est uniquement appliqué aux mises à jour. En cas de récupération, il permet une simultanéité complète, les récupérations reflètent les résultats des opérations de mise à jour les plus récentes. Les lectures peuvent donc être très rapides lorsque les écritures sont effectuées avec un verrou.
  • ConcurrentHashMap ne lance pas une ConcurrentModificationException si un thread tente de le modifier alors qu’un autre itère sur lui et n’autorise pas les valeurs NULL.
  • ConcurrentHashMap renvoie Iterator , qui fonctionne en toute sécurité (c.-à-d. Que l’iterator fera une copie de la structure de données interne) lors de modifications simultanées.
  • ConcurrentHashMap utilise une logique de fragments de bases de données (les Segment[] segments ) sont appelés niveaux de concurrence , c’est -à- dire divisent les données en fragments (segments). données ( Map ). La valeur par défaut est 16.

Pour comprendre le ConcurrentHashMap plus techniquement, veuillez regarder ce lien

L’analogie suivante vous aide à comprendre le concept uniquement (pas la logique)

  • Supposons que Hashtable et ConcurrentHashMap sont deux types de foyers.
  • Hashtable verrouille la porte principale de la maison.
  • ConcurrentHashMap verrouille la porte de la pièce spécifique au lieu de la porte principale.

Quel est le plus efficace pour les applications filetées?

ConcurrentHashMap est plus efficace pour les applications threadées.