Supongamos que tengo una matriz de miles de objetos y un pequeño número de subprocesos que pueden acceder a cada uno de los objetos. Quiero proteger el acceso a uno de los métodos de los objetos. La manera más fácil sería declarar ese método como synchronized
. Sin embargo, eso podría dar como resultado la creación de miles de monitores, cualquiera que sea la forma en que se implementen. Si esto fuera Win32, nunca crearía miles de objetos kernel como Mutex, pero CRITICAL_SECTIONs podría ser plausible. Me pregunto cuál es el caso en Java. Dada la posibilidad de que la disputa sea baja, ¿el uso de monitores impondría más que la cantidad de memoria que requieren? ¿Qué tan común es la práctica de usar una sincronización de granularidad tan baja en Java?¿Qué tan pesados son los monitores de Java?
(Obviamente hay soluciones como usar una matriz mucho más pequeña de objetos de sincronización, a los que se accederá usando algo de hash. No estoy buscando una solución práctica, estoy buscando una idea).
Los objetos Java vienen con un bloqueo de peso ligero integrado. Esta memoria se utiliza tanto si bloquea el objeto como si no. En resumen, Java está diseñado y optimizado para admitir el bloqueo de objetos. –
10 lbs –