Este artículo le presentará un concepto llamado Concurrent Hash Map In y continúe con una demostración práctica. Los siguientes consejos se cubrirán en este artículo,
- ¿Cómo funciona ConcurrentHashMap internamente?
- ¿Por qué otro mapa?
- ¿En qué es diferente?
- Diferencia entre ConcurrentHashMap y HashMap
- Trampas
Continuando con este artículo sobre el mapa hash concurrente en Java
¿Cómo funciona ConcurrentHashMap internamente?
Desde Java 5 en adelante, ConcurrentHashMap se presenta como una alternativa para HashTable. También podemos obtener un mapa sincronizado utilizando el método de la clase de utilidad llamado synchronizedMap () pero hay un inconveniente de este método, es decir, un rendimiento muy deficiente, ya que solo un hilo puede acceder a él a la vez. Entonces, ConcurrentHashMap aborda estos problemas.
Continuando con este artículo sobre el mapa hash concurrente en Java
¿Por qué otro mapa?
Aunque ya tenemos HashMap, HashTable, entonces lo que es una necesidad de ConcurrentHashMap, es porque proporciona un mejor rendimiento al mismo tiempo que es seguro para subprocesos.
Continuando con este artículo sobre el mapa hash concurrente en Java
¿En qué es diferente?
También se basa en hash, pero su rendimiento mejora gracias a su estrategia de bloqueo. A diferencia de HashTable o Synchronized HashMap, no aplica el mismo bloqueo en cada método, utiliza un bloqueo separado para cada método, utiliza un bloqueo de reentrante para este propósito. Similar a HashMap, ConcurrentHashMap tiene 16 cubos, es decir, segmentos, para crear ConcurrentHashMap con más de 16 cubos tiene diferentes constructores.
Antes de hablar en detalle, repasemos algunos conceptos a continuación:
ConcurrentHashMap: este mapa permite el acceso a subprocesos simultáneos. Solo una parte del mapa llamado segmento, es decir, la estructura de datos subyacente se bloquea al agregar o actualizar el mapa. Permite el acceso a subprocesos simultáneos para leer los datos sin bloquear. Se introdujo para mejorar el rendimiento.
implementación de cola de prioridad en java
- Nivel de simultaneidad: es un número que es un número estimado de subprocesos que se actualizan simultáneamente.
- Factor de carga: es un valor que se utiliza para controlar el factor de cambio de tamaño.
- Capacidad Inicial: Es una propiedad que crea un Mapa con el tamaño proporcionado.
Veamos el diagrama a continuación e intentemos comprender cómo funciona ConcurrentHashMap.
Entonces, en el diagrama anterior, tenemos 16 bloqueos que bloquean solo una parte del mapa que se requiere para que diferentes subprocesos puedan acceder a otros métodos, mejorando así el rendimiento.
Similar a HashMap, ConcurrentHashMap funciona de manera similar, contiene 16 segmentos por defecto y almacena elementos mediante hash, por lo que si los elementos tienen el mismo hash, se almacenan en el mismo segmento como se muestra en el diagrama anterior con la ayuda de la lista vinculada.
Continuando con este artículo sobre el mapa hash concurrente en Java
Diferencia entre ConcurrentHashMap y HashMap
HashMap pertenece a las colecciones, mientras que ConcurrentHashMap pertenece a las colecciones concurrentes, sin embargo, existen muchas otras diferencias entre ellas.
- ConcurrentHashMap esSeguro para subprocesos, es decirsincronizado pero HashMap no está sincronizado.
- ConcurrentHashMap tiene un rendimiento bajo porque está sincronizado porque a veces los subprocesos tienen que esperar, pero HashMap tiene un alto rendimiento porque no está sincronizado y cualquier subproceso puede acceder a él simultáneamente.
Obtendremos ConcurrentModificationException si dos subprocesos intentan simultáneamente modificar o agregar contenido de Object. Sin embargo, en el caso de ConcurrentHashMap, no obtendremos ninguna excepción al realizar la misma operación.
última tecnología en inteligencia artificial
Se permiten valores nulos para la clave y los valores en HashMap, sin embargo, ConcurrentHashMap no permite valores nulos para la clave y el valor que intentó agregar un valor nulo, obtendremos una excepción, es decir, NullPointerException.
HashMap se introduce en JDK 1.2, mientras que ConcurrentHashMap se introduce en JDK 1.5.
Como hemos visto anteriormente para un mejor rendimiento, consta de una matriz de nodos como cubos de tabla que eran segmentos de tabla antes de Java 8 .
Los depósitos se inicializan de forma diferida cuando se realiza la primera inserción. Cada depósito se puede bloquear de forma independiente bloqueando el primer nodo del depósito y las operaciones de lectura no bloquean.
Comparado con HashMap, ConcurrentHashMap proporciona el extra concurrencyLevel argumento para controlar el número de subprocesos estimados a utilizar.
Constructores:
ConcurrentHashMap m = nuevo ConcurrentHashMap ()
Se crea un nuevo mapa vacío con una capacidad inicial predeterminada de 16, un factor de carga de 0,75 y un nivel de simultaneidad 16.
ConcurrentHashMap m = nuevo ConcurrentHashMap (int initialCapacity)
Se crea un nuevo mapa vacío con una capacidad inicial especificada, un factor de carga de 0,75 y un nivel de simultaneidad 16.ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor)
Se crea un nuevo mapa vacío con una capacidad inicial especificada y un factor de carga con nivel de concurrencia 16.
ConcurrentHashMap m = new ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel)
Se crea un nuevo mapa vacío con una capacidad inicial, un factor de carga y un nivel de simultaneidad especificados.ConcurrentHashMap m = nuevo ConcurrentHashMap (Map m)
Crea un nuevo ConcurrentHashMap a partir del mapa proporcionado.
Los otros dos argumentos: initialCapacity y loadFactor funcionaron de la misma forma que HashMap.
ConcurrentMap es coherente con la memoria en operaciones clave / valor en un entorno de subprocesos múltiples.
Continuando con este artículo sobre el mapa hash concurrente en Java
Trampas
Si bien la recuperación de objetos, ConcurrentHashMap no está bloqueada y puede superponerse con las operaciones de actualización, por lo que para un mejor rendimiento solo recupera las operaciones de actualización completadas más recientemente.
Los resultados de los métodos de estado agregados, incluidos size, isEmpty y containsValue, suelen ser útiles solo cuando un mapa no se actualiza simultáneamente en otros subprocesos.
ejemplo de espacio de nombres c ++
Si las actualizaciones simultáneas se controlan correctamente, estos métodos de estado pueden ser confiables.
Aunque estos métodos no garantizan en tiempo real.
La capacidad predeterminada de la tabla es 16, sin embargo, podemos cambiarla usando el nivel de simultaneidad.
public ConcurrentHashMap (int initialCapacity, float loadFactor, int concurrencyLevel) {// ... if (initialCapacitySi se requiere que las claves estén ordenadas, podemos usar ConcurrentSkipListMap.
Ahora, después de ejecutar el programa anterior, habría entendido el mapa de hash concurrente en Java. Por lo tanto, hemos llegado al final de este artículo sobre Si desea obtener más información, consulte el , una empresa de aprendizaje en línea de confianza. El curso de certificación y capacitación Java J2EE y SOA de Edureka está diseñado para capacitarlo en conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.
Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este artículo y nos comunicaremos con usted lo antes posible.