2010-07-29 17 views
80

¿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?

+7

+1 Esto me hizo leer cómo se implementan los monitores en el nivel de JVM. Aprendí algo nuevo – naikus

+0

@naikus Espero compartir los detalles de usted :) – roottraveller

Respuesta

50

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.

+1

entonces, ¿podemos decir que cuando creamos un método sincronizado estamos definiendo un bloqueo (monitor) en el método de ese objeto? – xdevel2000

+0

Exactamente. Cuando tienes un método sincronizado (que no puse en mi respuesta) estás creando un monitor en ese método. –

+19

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). –

14

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).

+0

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

5
  1. Un monitor es un concepto/mecanismo que no se limita al lenguaje Java;
  2. "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";
  3. 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;
  4. lea sobre monitores here.
3

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.

Cuestiones relacionadas