Todos los objetos disponen de un monitor interno, que solo permite el acceso de un hilo a la vez
Que son los monitores
- Estructura de alto nivel para la gestión de concurrencia
- El monitor sólo permite el acceso a un hilo a la vez
- Contiene una lista priorizada de hilos en espera para entrar
- Gestiona dicho acceso
Porque los necesitamos
La sincronización solo nos garantiza que a un recurso no se puede acceder a la vez desde más de un sitio, pero no nos garantiza que el hilo que tenía que acceder lo haya hecho.
Si nos imaginamos un hilo que va dejando información en una variable, y otro hilo que la va recogiendo, necesitamos controlar que los dos hilos no accedan a la vez, que eso nos lo hace el synchronized, pero también necesitamos estar seguro que el hilo que deja la información, lo haya hecho, antes de poder recogerla
Para ello, deberíamos comprobar si tenemos la información, y si no, esperar, y así, hasta que aparezca
Los monitores nos permiten quedarnos esperando que el otro programa deje la información, y luego, que nos avise para poderla recoger
Como funcionan
Los hilos llevan su propio control de avance y parada, para ello, disponen de los métodos:
- wait() Detiene la ejecución del hilo hasta recibir una notificación
- notify() Despierta a uno de los hilos detenidos (A cualquiera de ellos)
- notifyAll() Despierta a todos los hilos detenidos
- Todos pasan a estar “en espera” hasta que el planificador les ceda el turno, claro
Para invocar el método wait es necesario tener el control del monitor… por tanto, siempre debe activarse dentro de un método sincronizado
Cada hilo ha de esperar el evento, por lo que la llamada a wait, es conveniente hacerla dentro de un while

En el otro hilo, cuando deseemos liberar a los hilos que están esperando, podemos hacer

Comparte esto:
- Comparte en Facebook (Se abre en una ventana nueva) Facebook
- Compartir en Telegram (Se abre en una ventana nueva) Telegram
- Compartir en WhatsApp (Se abre en una ventana nueva) WhatsApp
- Compartir en LinkedIn (Se abre en una ventana nueva) LinkedIn
- Compartir en X (Se abre en una ventana nueva) X
- Enviar un enlace a un amigo por correo electrónico (Se abre en una ventana nueva) Correo electrónico
- Más
- Haz clic en Pinterest (Se abre en una ventana nueva) Pinterest
- Imprimir (Se abre en una ventana nueva) Imprimir
- Compartir en Pocket (Se abre en una ventana nueva) Pocket
- Compartir en Reddit (Se abre en una ventana nueva) Reddit
- Compartir en Tumblr (Se abre en una ventana nueva) Tumblr
- Compartir en Mastodon (Se abre en una ventana nueva) Mastodon
Relacionado
Descubre más desde Recursos para formacion
Suscríbete y recibe las últimas entradas en tu correo electrónico.