184 votes

ConcurrentHashMap vs HashMap Synchronisé

Quelle est la différence entre l'utilisation de la classe encapsulée, SynchronizedMap, sur HashMap et ConcurrentHashMap? Est-ce juste pouvoir modifier le hashmap tout en le répétant (ConcurrentHashMap)?

172voto

Joey.zhgw Points 21

Synchronisé HashMap:

  1. Chaque méthode est synchronisé à l'aide d'un objet de niveau de verrouillage. AFIN de l'obtenir et de mettre des méthodes sur synchMap acquérir un verrou.

  2. Le verrouillage de l'ensemble de la collection est une surcharge de performance. Alors qu'un thread détient sur la serrure, aucun autre thread ne peut utiliser la collection.

ConcurrentHashMap a été introduit dans le JDK 5.

  1. Il n'y a pas de blocage au niveau de l'objet,Le verrouillage est beaucoup plus fine granularité. Pour un concurrentHashMap, les verrous peuvent être à une table de hachage seau niveau.

  2. L'effet de la baisse de niveau de verrouillage est que vous pouvez avoir simultanées des lecteurs et des auteurs whilch n'est pas possible pour la synchronisation de collections. Cela conduit à beaucoup plus d'évolutivité.

  3. ConcurrentHashMap ne pas jeter un ConcurrentModificationException si un thread tente de modifier tandis que l'autre est une itération sur elle.

Cet article Java 7: HashMap vs ConcurrentHashMap est une très bonne lecture. Fortement recommandé.

90voto

trshiv Points 1163

La réponse courte:

Les deux cartes sont des implémentations thread-safe de l'interface Map. ConcurrentHashMap est implémenté pour un débit plus élevé dans les cas où une simultanéité élevée est attendue.

L' article de Brian Goetz sur l'idée de ConcurrentHashMap est une très bonne lecture. Hautement recommandé.

36voto

fastcodejava Points 22174

ConcurrentHashMap est sécurisé pour les threads sans synchronisation de la carte entière. Les lectures peuvent être très rapides lorsque l'écriture est effectuée avec un verrou.

7voto

rai.skumar Points 3187

ConcurrentHashMap utilise un mécanisme de verrouillage à grain fin appelé lock stripping pour permettre un plus grand degré d'accès partagé. De ce fait, il offre une meilleure simultanéité et évolutivité .

De plus, les itérateurs renvoyés pour ConcurrentHashMap sont faiblement cohérents au lieu de la technique d' échec rapide utilisée par Synchronized HashMap.

3voto

thiru_k Points 423
  • SynchronizedHashMap utilise un seul moniteur pour synchroniser tous les
    méthodes où ConcurrentHashMap utilise une multitude de verrous.
  • Les méthodes de recherche dans ConcurrentHashMap ne sont pas synchronisées.

Une bonne explication est donnée ici .

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