J'ai une carte qui doit être modifiée par plusieurs threads simultanément.
Il semble qu'il existe trois implémentations différentes de Map synchronisé dans l'API Java :
Hashtable
Collections.synchronizedMap(Map)
ConcurrentHashMap
D'après ce que j'ai compris, Hashtable
est une ancienne implémentation (extension de l'obsolète Dictionary
), qui a été adaptée par la suite pour correspondre à la classe Map
l'interface. Bien qu'elle es synchronisée, elle semble avoir de sérieuses les problèmes d'évolutivité et est déconseillé pour les nouveaux projets.
Mais qu'en est-il des deux autres ? Quelles sont les différences entre les cartes renvoyées par Collections.synchronizedMap(Map)
y ConcurrentHashMap
s ? Laquelle correspond à quelle situation ?
7 votes
@SmilesinaJar Le lien est actuellement rompu, voici une copie archivée de cet article : Pourquoi ConcurrentHashMap est meilleur que Hashtable et aussi bon que HashMap ?
2 votes
IBM : Comment ConcurrentHashMap offre une plus grande concurrence sans compromettre la sécurité des threads @ ibm.com/developerworks/java/library/j-jtp08223/
1 votes
Pour information, Java 6 a apporté
ConcurrentSkipListMap
en tant qu'autreMap
la mise en œuvre. Conçue pour être hautement concurrentielle sous charge, l'utilisation de Sauter la liste algorithme.