"Hej, Amigo!"

"I mine tidligere lektioner brugte jeg nogle gange ordene 'mutex' og 'monitor', nu er det tid til at fortælle dig, hvad de betyder."

"Jeg lytter."

"En mutex er et specielt objekt til synkronisering af tråde/processer. Det har to mulige tilstande: optaget og ledigt. Enkelt sagt er en mutex en boolsk variabel, der kan have to værdier: optaget (sand) og ledig (falsk)."

"Når en tråd vil tage ejerskab af et objekt, markerer den objektets mutex som optaget. Og når den er færdig med at arbejde med objektet, markerer den dens mutex som fri."

"Med andre ord er en mutex som et 'optaget/fri'-skilt på døren?"

"Ja. Og sådan en mutex er forbundet med hvert objekt i Java. Kun Java-maskinen har direkte adgang til mutex'en. Den er skjult for programmøren."

"Hvordan bruger vi det så?"

"I Java kan vi arbejde med en mutex gennem en skærm."

"En skærm er en speciel mekanisme (kodestykke) lagt oven på en mutex. Den garanterer korrekt interaktion med mutexen. Det er ikke nok at markere et objekt som optaget. Det er stadig nødvendigt at sikre, at andre tråde ikke forsøger at brug den travle genstand."

"I Java implementeres skærme ved hjælp af nøgleordet synkroniseret."

"Når du skriver en synkroniseret blok, erstatter Java-kompileren den med tre stykker kode:"

1) I begyndelsen af ​​den synkroniserede blok tilføjes kode, der markerer mutex'en som optaget.

2)  I slutningen af ​​den synkroniserede blok tilføjes kode, der markerer mutex'en som fri.

3)  Før den synkroniserede blok tilføjes kode, som, hvis mutex'en er optaget, får tråden til at vente til mutex'en frigives.

"Sådan virker det nogenlunde:"

Kode Hvordan det virker Beskrivelse
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Tråden sover, så længe mutex'en er optaget
(vi forlader løkken, når mutex'en slippes). Marker mutex'en som optaget.

Udfør doTask();

Marker mutex'en som fri

"I virkeligheden er logikken dér anderledes og mere kompliceret. Men det er kun detaljer."

"Må jeg få detaljerne?"

"Indtil du lærer at bruge det rigtigt, nytter det ikke noget at blive viklet ind i detaljerne."

"For et par niveauer tilbage gav jeg dig en liste over alle trådtilstande med overgangspile og en liste over metoder, der påvirker denne tilstand. Kan du huske meget?"

"Ikke rigtig. Jeg glemmer bare alting så hurtigt..."

"Jo mindre du øver dig, jo mindre får du gavn af teorien."

"På niveau 40 vil du lære at bruge alt dette, og jeg vil forklare, hvordan alt dette faktisk fungerer. I mellemtiden skal du bare lære at bruge det hele rigtigt. Forstår det?"

"Ja tak, Ellie."