¿Cuál es la diferencia entre un ConcurrentHashMap y un Hashtable en Java?ConcurrentHashMap y Hashtable en Java
¿Cuál es más eficiente para aplicaciones con rosca?
¿Cuál es la diferencia entre un ConcurrentHashMap y un Hashtable en Java?ConcurrentHashMap y Hashtable en Java
¿Cuál es más eficiente para aplicaciones con rosca?
ConcurrentHashMap
utiliza varios depósitos para almacenar datos. Esto evita bloqueos de lectura y mejora enormemente el rendimiento en un HashTable
. Ambos son seguros para subprocesos, pero hay ganancias obvias de rendimiento con ConcurrentHashMap
.
Cuando lee desde ConcurrentHashMap
usando get()
, no hay bloqueos, al contrario de HashTable
para el que todas las operaciones están simplemente sincronizadas. HashTable
se lanzó en las versiones anteriores de Java, mientras que ConcurrentHashMap
es una cosa de Java 5+.
HashMap
es lo mejor para usar en una sola aplicación con hilos.
También hay 'ConcurrentHashMap.putIfAbsent()' que no tiene un equivalente en el antiguo ' Hashtable'. Y cuando solo lee de un 'ConcurrentHashMap', no hay bloqueos, al contrario de' Hashtable', para el cual todas las operaciones simplemente se sincronizan. –
@FrankPavageau agregó sus comentarios muy útiles en la respuesta original. – Algorithmist
ConcurrentHashMap y Hashtable mecanismo de bloqueo
Hashtable
es pertenece a la infraestructura de recogida; ConcurrentHashMap
pertenece al marco Ejecutor.Hashtable
utiliza cerradura simple para datos enteros. ConcurrentHashMap
usa bloqueos múltiples en el nivel de segmento (16 de forma predeterminada) en lugar del nivel de objeto, es decir, Map
completo.ConcurrentHashMap
bloqueo se aplica solo para las actualizaciones. En el caso de las recuperaciones, permite concurrencia total, las recuperaciones reflejan los resultados de las operaciones de actualización completadas más recientemente. Entonces, las lecturas pueden suceder muy rápido mientras las escrituras se realizan con un bloqueo.ConcurrentHashMap
no arroja un ConcurrentModificationException
si un hilo intenta modificarlo mientras otro itera sobre él y no permite valores nulos.ConcurrentHashMap
devuelve Iterator
, que falla-seguro (es decir, el iterador hará una copia de la estructura de datos interna) en la modificación simultánea.ConcurrentHashMap
utiliza una lógica fragmentos de bases de datos (Segment<K, V>[] segments
) se conoce como concurrencia-Nivel, es decir, divide los datos en fragmentos (segmentos) que pone cerraduras de cada fragmento (segmento) en lugar de poner un candado para datos enteros (Map
) El valor por defecto es 16.Comprender la ConcurrentHashMap más técnicamente favor mira este link
la siguiente analogía ayuda a conseguir entender el concepto (no lógica)
Hashtable
y ConcurrentHashMap
son dos tipos de casas.Hashtable
bloquea la puerta principal del hogar.ConcurrentHashMap
bloquea la puerta de la habitación específica en lugar de la puerta principal.¿Cuál es más eficiente para las aplicaciones con rosca?
ConcurrentHashMap
es más eficiente para aplicaciones con rosca.
Puede ser esto ayuda http://www.codercorp.com/blog/java/why-concurrenthashmap-is-better-than-hashtable-and-just-as-good-hashmap.html – kosa
Para un no roscado aplicación, use 'HashMap'. –
También vea http://stackoverflow.com/a/40878/632951 para más información. – Pacerier