"¡Hola, amigo!"

"En mis lecciones anteriores, a veces usaba las palabras 'mutex' y 'monitor', ahora es el momento de decirles lo que significan".

"Soy todo oídos."

"Un mutex es un objeto especial para sincronizar subprocesos/procesos. Tiene dos estados posibles: ocupado y libre. En pocas palabras, un mutex es una variable booleana que puede tener dos valores: ocupado (verdadero) y libre (falso)".

"Cuando un subproceso quiere tomar posesión de un objeto, marca el mutex del objeto como ocupado. Y cuando termina de trabajar con el objeto, marca su mutex como libre".

"En otras palabras, ¿un mutex es como un letrero de 'ocupado/libre' en la puerta?"

"Sí. Y dicho mutex está asociado con cada objeto en Java. Solo la máquina Java tiene acceso directo al mutex. Está oculto para el programador".

"¿Cómo lo usamos entonces?"

"En Java, podemos trabajar con un mutex a través de un monitor".

"Un monitor es un mecanismo especial (pieza de código) superpuesto a un mutex. Garantiza una interacción adecuada con el mutex. No es suficiente marcar un objeto como ocupado. Aún es necesario asegurarse de que otros subprocesos no intenten usa el objeto ocupado".

"En Java, los monitores se implementan usando la palabra clave sincronizada".

"Cuando escribes un bloque sincronizado, el compilador de Java lo reemplaza con tres piezas de código:"

1) Al comienzo del bloque sincronizado, se agrega un código que marca el mutex como ocupado.

2)  Al final del bloque sincronizado, se agrega un código que marca el mutex como libre.

3)  Antes del bloque sincronizado, se agrega un código que, si el mutex está ocupado, hace que el subproceso espere hasta que se libere el mutex.

"Así es más o menos cómo funciona:"

Código Cómo funciona Descripción
synchronized(object)
{

object.doJob();

}
while (object.mutex)
Thread.sleep(1);

object.mutex = true;

object.doJob();

object.mutex = false;

El subproceso duerme mientras el mutex esté ocupado
(salimos del bucle cuando se libera el mutex). Marque el mutex como ocupado.

Ejecute doTask();

Marcar el mutex como libre

"En realidad, la lógica allí es diferente y más complicada. Pero estos son solo detalles".

"¿Puedo tener los detalles?"

"Hasta que no aprenda a usarlo correctamente, no tiene sentido enredarse en los detalles".

"Hace un par de niveles, te di una lista de todos los estados de hilos con flechas de transición y una lista de métodos que afectan este estado. ¿Recuerdas mucho?"

"No realmente. Solo olvido todo tan rápido..."

"Mientras menos práctica hagas, menos te beneficiarás de la teoría".

"Para el nivel 40, aprenderás a usar todo esto y te explicaré cómo funciona realmente todo esto. Mientras tanto, solo aprende a usarlo todo correctamente. ¿Entendido?"

"Sí, gracias, Ellie".