ConcurrentHashMap y Hashtable en Java

¿Cuál es la diferencia entre un ConcurrentHashMap y un Hashtable en Java?

¿Cuál es más eficiente para aplicaciones con hilos?

ConcurrentHashMap usa múltiples cubos para almacenar datos. Esto evita lockings de lectura y mejora enormemente el rendimiento en una HashTable . Ambos son seguros para subprocesos, pero hay ganancias obvias de rendimiento con ConcurrentHashMap .

Cuando lee desde un ConcurrentHashMap usando get() , no hay lockings, al contrario que HashTable para el cual todas las operaciones están simplemente sincronizadas. HashTable fue lanzado en versiones anteriores de Java, mientras que ConcurrentHashMap es una cosa java 5+.

HashMap es lo mejor para usar en una sola aplicación con subprocesos.

ConcurrentHashMap y mecanismo de locking Hashtable

  • Hashtable pertenece al marco de la Colección; ConcurrentHashMap pertenece al marco Ejecutor.
  • Hashtable utiliza un solo locking para datos completos. ConcurrentHashMap utiliza lockings múltiples en el nivel de segmento (16 por defecto) en lugar de nivel de objeto, es decir, Map completo.
  • ConcurrentHashMap locking ConcurrentHashMap se aplica solo para 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 locking.
  • ConcurrentHashMap no arroja una ConcurrentModificationException si un hilo intenta modificarlo mientras otro está iterando 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 de fragmentos de la base de datos ( Segment[] segments ) se conoce como nivel de simultaneidad , es decir, divide los datos en fragmentos (segmentos) que pone lockings en cada fragmento (segmento) en lugar de poner un solo locking para todo datos ( Map ). El valor predeterminado es 16.

Para comprender el ConcurrentHashMap más técnicamente, mira este enlace

La siguiente analogía te ayuda a entender el concepto solamente (no la lógica)

  • Supongamos que Hashtable y ConcurrentHashMap son dos tipos de hogares.
  • Hashtable bloquea la puerta principal de la casa.
  • ConcurrentHashMap bloquea la puerta de la habitación específica en lugar de la puerta principal.

¿Cuál es más eficiente para aplicaciones con hilos?

ConcurrentHashMap es más eficiente para aplicaciones con hilos.

    Intereting Posts