Colección de citas famosas - Slogan de motivación - La diferencia entre HashMap, ConcurrentHashMap y HashTable

La diferencia entre HashMap, ConcurrentHashMap y HashTable

ConcurrentHashMap se introduce para tener una mejor elección entre colecciones sincronizadas HashTable. La principal diferencia entre HashTable, HashMap y ConcurrentHashMap es que HashMap no está sincronizado, no es seguro para subprocesos y no es adecuado para su uso en entornos concurrentes de subprocesos múltiples. A continuación, ConcurrentHashMap es un contenedor de recopilación seguro para subprocesos, especialmente en entornos concurrentes y de subprocesos múltiples, y generalmente se usa como la implementación principal de Map. Además de la seguridad de los hilos, existen algunas diferencias sutiles entre ellos, que se presentarán en este artículo. Por cierto, la diferencia entre HashMap y ConcurrentHashMap y ConcurrentHashMap y Hashtable surge a menudo en las entrevistas de Java, especialmente para programadores senior de Java.

En esta sección, veremos más detalles sobre HashMap y ConcurrentHashMap y compararemos parámetros entre ellos, como seguridad de subprocesos, sincronización, rendimiento y uso básico.

Resuma las diferencias entre los dos anteriores, las diferencias entre ellos en seguridad de subprocesos, escalabilidad y sincronización. Si se usa para almacenamiento en caché, ConcurrentHashMap es una mejor opción y se usa a menudo en aplicaciones Java. ConcurrentHashMap es mejor cuando el número de subprocesos de operación de lectura es mayor que el número de subprocesos de operación de escritura.

Aunque las tres clases de colección son todas seguras para subprocesos en aplicaciones concurrentes de subprocesos múltiples, tienen una diferencia importante: la forma en que implementan la seguridad de subprocesos. Hashtable es una clase abandonada en jdk1. Agrega la palabra clave sincronizada a todos los métodos para lograr la seguridad de los subprocesos. Todos los métodos están sincronizados, lo que hace que el acceso de múltiples subprocesos sea particularmente ineficiente. El mapa sincronizado no es muy diferente de HashTable, y se realizan operaciones similares al mismo tiempo. La única diferencia entre los dos es que el mapa sincronizado no se abandona. Puede usarse como contenedor de sincronización usando Collections.synchronizedMap () para envolver el mapa.

Por otro lado, el diseño de ConcurrentHashMap es un poco especial, lo que se refleja en operaciones de múltiples subprocesos. Permite que 16 subprocesos lean y escriban este contenedor de mapas de forma predeterminada sin sincronización externa. Debido a que su implementación interna elimina los bloqueos, es altamente escalable. A diferencia de HashTable y Synchronized Map, ConcurrentHashMap no necesita bloquear todo el mapa, sino que lo divide en varios segmentos y bloquea los datos en los que desea operar.

Francamente hablando, las clases de colección son una de las API de Java más importantes y creo que usarlas apropiadamente es un arte. Según mi experiencia personal, usaré contenedores ArrayList para mejorar el rendimiento de mis programas Java en lugar de usar algunos contenedores abandonados como Vector, etc. Antes de Java 5, los contenedores de recopilación de Java tenían un defecto fatal, que era la falta de escalabilidad. .

Las clases de recopilación síncrona como Hashtable y Vector se han convertido gradualmente en obstáculos en las aplicaciones Java multiproceso; después de jdk5, aparecieron algunas buenas colecciones concurrentes, que tienen un gran impacto en el comercio electrónico de gran capacidad y baja latencia. Systems, es la columna vertebral del acceso rápido a los datos.

Dirección original:

La diferencia entre ConcurrentHashMap y HashMap

ConcurrentHashMap vs Hashtable vs Synchronized Map