¿A qué se refiere un monitor en la programación concurrente en Java?
Cuando leo que "cada objeto ha asociado un monitor", ¿qué significa?
¿Es un objeto especial?
¿A qué se refiere un monitor en la programación concurrente en Java?
Cuando leo que "cada objeto ha asociado un monitor", ¿qué significa?
¿Es un objeto especial?
Respuestas:
Un monitor es un mecanismo para controlar el acceso concurrente a un objeto.
Esto te permite hacer:
Hilo 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Hilo 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Esto evita que los subprocesos 1 y 2 accedan a la sección supervisada (sincronizada) al mismo tiempo. Uno comenzará y el monitor evitará que el otro acceda a la región antes de que finalice el primero.
No es un objeto especial. Mecanismo de sincronización es colocado en la clase de raíz de jerarquía: java.lang.Object
.
También hay wait
y notify
métodos que también usarán el monitor de objetos para la comunicación entre diferentes hilos.
Class
objeto correspondiente para los métodos estáticos. Si ya tiene un método1 sincronizado () y declara sincronizado el método2 (), no se crean nuevos monitores y, de hecho, invocar cualquiera de los métodos (en el mismo objeto) intentará bloquear el mismo monitor. Esto a menudo atrapa a los recién llegados.
Un monitor es una entidad que posee un conjunto de bloqueo y de espera . En Java, cualquiera Object
puede servir como 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 los libros de Google, y esa sección está disponible para leer).
Wakes up all threads that are waiting on this object's monitor.
acerca de notifyall (), lo que obtengo es que el objeto está manteniendo (con la ayuda de una entidad / objeto interno) lo que todos los subprocesos están esperando para bloquear, esa entidad / objeto interno se llama monitor.
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 subproceso mantiene el monitor para algún elemento de datos, otros subprocesos se bloquean y no pueden inspeccionar ni modificar los datos.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Un mecanismo para controlar el acceso a los objetos de uno en uno.
Monitor es una construcción de sincronización que permite que los subprocesos 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 indicar a otros hilos que su condición se ha cumplido. Es una entidad que posee un conjunto de bloqueo y de espera. En Java, cualquier objeto puede servir como monitor.
En la máquina virtual Java, cada objeto y clase se asocia lógicamente con un monitor. Para implementar la capacidad de exclusión mutua de los monitores, se asocia un bloqueo (a veces llamado mutex) con cada objeto y clase. Esto se llama semáforo en términos de sistemas operativos, mutex es un semáforo binario.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
El monitor está asociado con un objeto o miembro de datos, que se adquiere cuando se ingresa un miembro de datos u objeto es un bloque de sincronización (sección crítica) y se libera cuando se sale.