thread - synchronized hashmap java




Necesita una explicación simple de cómo funciona el "trazado de bandas" con ConcurrentHashMap (2)

El concepto clave aquí es el "cubo". en lugar de usar un bloqueo global para todo este hash Table, usa un pequeño bloqueo para cada grupo. También es un buen análogo al ordenamiento de cubetas que puede mejorar la complejidad de clasificación.

De acuerdo con Java Concurrency in Practice, el capítulo 11.4.3 dice:

La división de bloqueo a veces se puede extender al bloqueo de partición en un conjunto de objetos independientes de tamaño variable, en cuyo caso se denomina división de bloqueo. Por ejemplo, la implementación de ConcurrentHashMap utiliza una matriz de 16 bloqueos, cada uno de los cuales protege 1/16 de los cubos de hash; La cubeta N está protegida por el bloqueo N mod 16.

Todavía tengo problemas para entender y visualizar el mecanismo de corte de líneas y cubos. ¿Alguien puede explicar esto con buenas palabras de comprensión :)

Gracias por adelantado.


El mapa hash se basa en una matriz, donde la función hash asigna un objeto a un elemento en la matriz subyacente. Digamos que la matriz subyacente tiene 1024 elementos: ConcurrentHashMap realmente convierte esto en 16 subarreglos diferentes de 64 elementos, por ejemplo, {0, 63}, {64, 127}, etc. La sub-matriz {0, 63} no afecta a la sub-matriz {64, 127} - un subproceso puede escribir en la primera sub-matriz mientras que otro subproceso escribe en la segunda sub-matriz.





concurrenthashmap