simple - que es un atributo en java
¿Cuál es el significado del monitor de un objeto en Java? ¿Por qué usar esta palabra? (6)
Al leer artículos sobre hilos de Java, a menudo noto la expresión: "el hilo actual es el propietario del monitor de este objeto". Entiendo el significado: el hilo obtiene el derecho de operar sobre el objeto. Pero me sorprende por qué usamos la frase "el monitor del objeto" en lugar de "el bloqueo del objeto".
En resumen, no sé el significado de la palabra ''monitor''. La pregunta puede ser extraña y simple. Pero me gustaría que alguien pueda ayudar a resolverlo. 3ks
pero estoy confundido por qué la palabra "el monitor del objeto" insiste en "bloqueo del objeto"?
Vea la respuesta de ulmangt para enlaces que explican el término "monitor" como se usa en este contexto.
¿Por qué usar el término "monitor" en lugar de "bloquear"? En términos estrictos, los términos sí significan cosas diferentes ... especialmente si los usa de la manera en que fueron originalmente destinados a ser utilizados.
Un "bloqueo" es algo con primitivas de adquisición y liberación que mantienen ciertas propiedades de bloqueo; por ejemplo, uso exclusivo o escritor único / lector múltiple.
Un "monitor" es un mecanismo que asegura que solo un hilo puede ejecutar una determinada sección (o secciones) de código en cualquier momento dado. Esto se puede implementar utilizando un bloqueo (y "variables de condición" que permiten que los subprocesos esperen o envíen notificaciones a otros hilos para que se cumpla la condición), pero es más que solo un bloqueo. De hecho, en el caso de Java, el bloqueo real utilizado por un monitor no es directamente accesible. (No se puede decir "Object.lock ()" para evitar que otros subprocesos lo adquieran ... como se puede hacer con una instancia de Java
Lock
).
En resumen, si uno fuera pedante, el "monitor" es en realidad un término mejor que "bloqueo" para caracterizar lo que Java proporciona. Pero en la práctica, ambos términos se usan casi de manera intercambiable.
Aunque es tarde para responder a esta pregunta, pensé simplemente agregarla en caso de que fuera útil.
Aquí hay un bloque sincronizado de código Java dentro de un método Java no sincronizado
public void add(int value){
synchronized(this){
this.count += value;
}
}
En el ejemplo, se usa "this", que es la instancia en la que se llama al método add. Un método de instancia sincronizada usa el objeto al que pertenece como objeto monitor.
=> Solo se puede ejecutar un hilo dentro de un bloque de código Java sincronizado en el mismo objeto de monitor.
Cada objeto tiene algún tipo de Monitor integrado, esperando que algún código lo use. En realidad, la mayoría de los objetos nunca se utilizan como un monitor, por lo que no es necesario crearlos hasta que no se los utilice. En lugar de implementar esta característica como todos los objetos que tienen un campo de monitor privado, piense que se ha implementado como la JVM que tiene un monitor HashMap global.
Una posible implementación es esta: cada vez que se ingresa un bloque sincronizado, la JVM busca el objeto sincronizado en el mapa (monitores). Si lo encuentra, lo usa el monitor. Si no lo encuentra, ingresa en una sección crítica dedicada al mapa. A continuación, busca el objeto nuevamente porque es posible que otro hilo lo haya creado entre la comprobación anterior y la sección crítica. Si aún no está allí, crea el monitor para el objeto sincronizado y deja la sección crítica
La Máquina Virtual de Java usa monitores para admitir subprocesos múltiples. Los monitores logran esto a través de dos conceptos: exclusión mutua al ejecutar los hilos (aquí es donde ''bloqueo'' entra en escena) y coordinación como un medio de comunicación entre hilos (aquí es donde los métodos de esperar y notificar del objeto entran en la imagen).
Leer la siguiente parte de "Inside JVM" aclarará esta duda, ¿está muy bien explicado aquí? (Capítulo 20, Sincronización de subprocesos) -
Un bloque synchronized
alrededor de un object
es su monitor, que controla un bloqueo en el objeto. Aquí un ejemplo
synchronized (object) {
while (<condition does not hold>)
object.wait(timeout);
... // Perform action appropriate to condition
}
Un monitor es simplemente un término para un objeto cuyos métodos se pueden usar de forma segura en un entorno multiproceso.
Hay un gran artículo de Wikipedia sobre Monitores:
http://en.wikipedia.org/wiki/Monitor_(synchronization)
Si te desplazas hacia abajo, incluso tiene una sección explícita sobre Java .