"Hei, Amigo!"

"I mine tidligere leksjoner brukte jeg noen ganger ordene "mutex" og "monitor", nå er det på tide å fortelle deg hva de betyr."

"Jeg lytter."

"En mutex er et spesielt objekt for å synkronisere tråder/prosesser. Den har to mulige tilstander: opptatt og ledig. Enkelt sagt er en mutex en boolsk variabel som kan ha to verdier: opptatt (sann) og ledig (falsk)."

"Når en tråd ønsker å ta eierskap til et objekt, markerer den objektets mutex som opptatt. Og når den er ferdig med å jobbe med objektet, markerer den mutexen som ledig."

"Med andre ord, en mutex er som et 'opptatt/ledig'-skilt på døren?"

"Ja. Og en slik mutex er assosiert med hvert objekt i Java. Bare Java-maskinen har direkte tilgang til mutexen. Den er skjult for programmereren."

"Hvordan bruker vi det da?"

"I Java kan vi jobbe med en mutex gjennom en skjerm."

"En skjerm er en spesiell mekanisme (kodestykke) lagt på toppen av en mutex. Den garanterer riktig interaksjon med mutexen. Det er ikke nok å markere et objekt som opptatt. Det er fortsatt nødvendig å sikre at andre tråder ikke prøver å bruk den travle gjenstanden."

"I Java implementeres skjermer ved å bruke nøkkelordet synkronisert."

"Når du skriver en synkronisert blokk, erstatter Java-kompilatoren den med tre kodebiter:"

1) I begynnelsen av den synkroniserte blokken legges det til kode som markerer mutexen som opptatt.

2)  På slutten av den synkroniserte blokken legges det til kode som markerer mutexen som fri.

3)  Før den synkroniserte blokken legges det til kode som, hvis mutexen er opptatt, får tråden til å vente til mutexen slippes.

"Her er omtrent hvordan det fungerer:"

Kode Hvordan det fungerer Beskrivelse
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Tråden sover så lenge mutexen er opptatt
(vi går ut av loopen når mutexen slippes). Merk mutexen som opptatt.

Utfør doTask();

Merk mutexen som gratis

"I virkeligheten er logikken der annerledes og mer komplisert. Men dette er bare detaljer."

"Kan jeg få detaljene?"

"Før du lærer hvordan du bruker det riktig, er det ingen vits i å rote seg inn i detaljene."

"For et par nivåer tilbake ga jeg deg en liste over alle trådtilstander med overgangspiler og en liste over metoder som påvirker denne tilstanden. Husker du mye?"

"Ikke egentlig. Jeg glemmer alt så fort..."

"Jo mindre praksis du gjør, jo mindre drar du nytte av teorien."

"På nivå 40 vil du lære hvordan du bruker alt dette, og jeg skal forklare hvordan alt dette faktisk fungerer. I mellomtiden er det bare å lære å bruke alt riktig. Skjønner det?"

"Ja takk, Ellie."