¿Qué es un monitor en Java?
multithreading concurrency (7)
¿Qué es un monitor al que se hace referencia en la programación concurrente en Java?
Cuando leí que "cada objeto tiene asociado un monitor", ¿qué significa?
Es un objeto especial?
- Un monitor es un concepto / mecanismo que no está limitado al lenguaje Java;
- "En la programación concurrente, un monitor es un objeto o módulo destinado a ser utilizado con seguridad por más de un hilo";
- Como todo lector sabe, cada objeto en Java es una subclase de java.lang.Object. Los usuarios de java hicieron java.lang.Object de tal manera que tiene características y características que permiten a los programadores de Java usar cualquier objeto como monitor. Por ejemplo, cada objeto tiene una cola de espera, una cola de reingreso y métodos de espera y notificación que lo convierten en un monitor;
- lee sobre monitores here .
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 con un elemento de datos específico (una variable de condición) y funciona como un bloqueo en 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.
Monitor es una construcción de sincronización que permite que los hilos tengan exclusión mutua y la capacidad de esperar (bloquear) para que una determinada condición se haga realidad.
Los monitores también tienen un mecanismo para señalar a otros hilos que su condición se ha cumplido. Es una entidad que posee un bloqueo y un conjunto de espera. En Java, cualquier Objeto puede servir como un monitor.
En la máquina virtual Java, cada objeto y clase está lógicamente asociado a un monitor. Para implementar la capacidad de exclusión mutua de los monitores, se asocia un bloqueo (a veces llamado un mutex) con cada objeto y clase. Esto se llama semáforo en términos de sistemas operativos, mutex es un semáforo binario.
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 evita que los hilos 1 y 2 accedan a la sección monitorizada (sincronizada) al mismo tiempo. 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 un mecanismo de sincronización ubicado en la raíz de la jerarquía de clases: java.lang.Object
.
También hay métodos de wait
y notify
que también usarán el monitor del objeto para la comunicación entre diferentes hilos.
Un monitor es una entidad que posee un bloqueo y un conjunto de espera . En Java, cualquier Object
puede servir como un monitor.
Para obtener una explicación detallada de cómo funcionan los monitores en Java, recomiendo leer la sección Mecánica del monitor de Programación concurrente en Java (el enlace anterior muestra la vista previa en Google books, y esa sección está disponible para leer).
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Un mecanismo para controlar el acceso a los objetos uno a la vez
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
el monitor está asociado con el objeto o el miembro de datos, que se adquiere cuando un miembro de datos o un objeto se ingresa, es un bloque de sincronización (sección crítica) y se libera cuando sale.