¿Qué es un monitor al que se hace referencia en la programación concurrente en Java?¿Qué es un monitor en Java?
Cuando leí que "cada objeto tiene asociado un monitor", ¿qué significa?
¿Es un objeto especial?
¿Qué es un monitor al que se hace referencia en la programación concurrente en Java?¿Qué es un monitor en Java?
Cuando leí que "cada objeto tiene asociado un monitor", ¿qué significa?
¿Es un objeto especial?
Un monitor es un mecanismo para controlar el acceso concurrente a un objeto.
Esto le permite hacer:
Tema 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Tema 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Esto impide Temas 1 y 2 con el acceso a la sección supervisada (sincronizado) al mismo hora. Uno comenzará y el monitor evitará que el otro acceda a la región antes de que termine el primero.
No es un objeto especial. Es el mecanismo de sincronización ubicado en la raíz de la jerarquía de clases: java.lang.Object
.
También hay wait
y notify
métodos que también usarán el monitor del objeto para la comunicación entre diferentes subprocesos.
entonces, ¿podemos decir que cuando creamos un método sincronizado estamos definiendo un bloqueo (monitor) en el método de ese objeto? – xdevel2000
Exactamente. Cuando tienes un método sincronizado (que no puse en mi respuesta) estás creando un monitor en ese método. –
Erm, no exactamente. Cada objeto tiene automáticamente un monitor (mutex) asociado a él, independientemente de cualquier otra cosa. Cuando declara un método sincronizado, declara que el tiempo de ejecución debe obtener el bloqueo en el monitor del objeto antes de que comience la ejecución de ese método (y debe liberar el bloqueo antes de que el control regrese al código de llamada). –
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
A mecanismo para controlar el acceso a los objetos de uno en uno
Un monitor es una entidad que posee tanto un bloqueo dey una espera establecido. En Java, cualquier Object
puede servir como monitor.
Para una explicación detallada de cómo funcionan los monitores en Java, recomiendo la lectura de los Mecánica Seguir el sección del Concurrent Programming in Java (el enlace anterior muestra la vista previa en los libros de Google, y que el artículo está disponible para la lectura).
Como dijiste "Un monitor es una entidad ...", ¿significa que el monitor es un objeto/estado interno que posee/rastrea el bloqueo y el conjunto de espera? Si no, ¿puedes por favor elaborar Entidad aquí? Básicamente cuando java doc dice 'Despierta todos los hilos que están esperando en el monitor de este objeto'. Acerca de notifyall(), lo que obtengo es que el objeto está manteniendo (con la ayuda de la entidad/objeto interno) lo que todos los hilos esperan para el bloqueo. esa entidad/objeto interno se llama monitor? – user3198603
El lenguaje Java y el sistema de tiempo de ejecución admiten la sincronización de subprocesos mediante el uso de monitores.
Un monitor está asociado a un elemento de datos específico (una variable de condición) y funciona como un bloqueo de esos datos. Cuando un hilo retiene el monitor para algún elemento de datos, otros hilos están bloqueados y no pueden inspeccionar ni modificar los datos.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
monitor está asociado con objeto o datos de miembro, que es adquirir cuando un miembro de datos o un objeto es introducir es bloque de sincronización (sección crítica) y suelte cuando es salida.
+1 Esto me hizo leer cómo se implementan los monitores en el nivel de JVM. Aprendí algo nuevo – naikus
@naikus Espero compartir los detalles de usted :) – roottraveller