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 particiones 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 usa una matriz de 16 bloqueos, cada uno de los cuales protege 1/16 de los cubos de hash; El cubo N está protegido por un candado N mod 16.
Sigo teniendo problemas para comprender y visualizar el mecanismo de franjas y cubos de bloqueo. ¿Alguien puede explicar esto con buenas palabras de comprensión :)
Gracias por adelantado.
El mapa hash se construye 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 en realidad lo convierte en 16 submatrices diferentes de 64 elementos, p. Ej., {0, 63}, {64, 127}, etc. Cada submatriz tiene su propio bloqueo, por lo que modificar el La submatriz {0, 63} no afecta la submatriz {64, 127}: un subproceso puede escribir en la primera submatriz mientras que otro subproceso escribe en la segunda submatriz.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras