"Olá, amigo!"

"Em minhas aulas anteriores, às vezes usei as palavras 'mutex' e 'monitor', agora é hora de dizer o que elas significam."

"Sou todo ouvidos."

"Um mutex é um objeto especial para sincronizar threads/processos. Ele tem dois estados possíveis: ocupado e livre. Simplificando, um mutex é uma variável booleana que pode ter dois valores: ocupado (verdadeiro) e livre (falso)."

"Quando um thread quer se apropriar de um objeto, ele marca o mutex do objeto como ocupado. E quando termina de trabalhar com o objeto, ele marca seu mutex como livre."

"Em outras palavras, um mutex é como um sinal de 'ocupado/livre' na porta?"

"Sim. E tal mutex está associado a cada objeto em Java. Somente a máquina Java tem acesso direto ao mutex. Ele está oculto para o programador."

"Como vamos usá-lo, então?"

"Em Java, podemos trabalhar com um mutex por meio de um monitor."

"Um monitor é um mecanismo especial (pedaço de código) colocado em cima de um mutex. Ele garante a interação adequada com o mutex. Não basta marcar um objeto como ocupado. Ainda é necessário garantir que outras threads não tentem use o objeto ocupado."

"Em Java, os monitores são implementados usando a palavra-chave sincronizada."

"Quando você escreve um bloco sincronizado, o compilador Java o substitui por três partes do código:"

1) No início do bloco sincronizado, é adicionado um código que marca o mutex como ocupado.

2)  Ao final do bloco sincronizado, é adicionado um código que marca o mutex como livre.

3)  Antes do bloco sincronizado, é adicionado um código que, se o mutex estiver ocupado, faz com que a thread espere até que o mutex seja liberado.

"Aqui está mais ou menos como funciona:"

Código Como funciona Descrição
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

A thread dorme enquanto o mutex estiver ocupado
(saímos do loop quando o mutex é liberado). Marque o mutex como ocupado.

Execute doTask();

Marque o mutex como gratuito

"Na realidade, a lógica é outra e mais complicada. Mas são apenas detalhes."

"Posso ter os detalhes?"

"Até que você aprenda a usá-lo corretamente, não há sentido em se envolver nos detalhes."

"Alguns níveis atrás, dei a você uma lista de todos os estados de encadeamento com setas de transição e uma lista de métodos que afetam esse estado. Você se lembra de muita coisa?"

"Na verdade não. Eu apenas esqueço tudo tão rápido..."

"Quanto menos você pratica, menos se beneficia da teoria."

"No nível 40, você aprenderá como usar tudo isso, e eu explicarei como tudo isso realmente funciona. Enquanto isso, aprenda a usar tudo corretamente. Entendeu?"

"Sim, obrigado, Ellie."