"Hej, Amigo!"

"I mina tidigare lektioner använde jag ibland orden "mutex" och "monitor", nu är det dags att berätta vad de betyder."

"Jag lyssnar."

"En mutex är ett speciellt objekt för att synkronisera trådar/processer. Det har två möjliga tillstånd: upptaget och ledigt. Enkelt sagt är en mutex en boolesk variabel som kan ha två värden: upptagen (sant) och ledig (falsk)."

"När en tråd vill ta äganderätten till ett objekt markerar den objektets mutex som upptaget. Och när den är klar med att arbeta med objektet markerar den dess mutex som ledig."

"Med andra ord, en mutex är som en 'upptagen/ledig'-skylt på dörren?"

"Ja. Och en sådan mutex är associerad med alla objekt i Java. Endast Java-maskinen har direkt tillgång till mutexen. Den är dold för programmeraren."

"Hur använder vi det då?"

"I Java kan vi arbeta med en mutex genom en monitor."

"En bildskärm är en speciell mekanism (kodbit) som är skiktad ovanpå en mutex. Den garanterar korrekt interaktion med mutexen. Det räcker inte att markera ett objekt som upptaget. Det är fortfarande nödvändigt att se till att andra trådar inte försöker använd det upptagna objektet."

"I Java implementeras monitorer med nyckelordet synchronized."

"När du skriver ett synkroniserat block ersätter Java-kompilatorn det med tre stycken kod:"

1) I början av det synkroniserade blocket läggs kod till som markerar mutexet som upptaget.

2)  I slutet av det synkroniserade blocket läggs kod till som markerar mutexet som ledigt.

3)  Innan det synkroniserade blocket läggs kod till som, om mutexen är upptagen, får tråden att vänta tills mutexen släpps.

"Så här fungerar det ungefär:"

Koda Hur det fungerar Beskrivning
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Tråden sover så länge mutexen är upptagen
(vi lämnar loopen när mutexen släpps). Markera mutexen som upptagen.

Kör doTask();

Markera mutexet som ledigt

"I verkligheten är logiken där annorlunda och mer komplicerad. Men det här är bara detaljer."

"Kan jag få detaljerna?"

"Tills du lär dig hur man använder det på rätt sätt är det ingen idé att trassla in sig i detaljerna."

"För ett par nivåer tillbaka gav jag dig en lista över alla trådtillstånd med övergångspilar och en lista över metoder som påverkar detta tillstånd. Kommer du ihåg mycket?"

"Inte riktigt. Jag glömmer bara allt så snabbt..."

"Ju mindre praktik du gör, desto mindre har du nytta av teorin."

"På nivå 40 kommer du att lära dig hur du använder allt detta, och jag ska förklara hur allt detta faktiskt fungerar. Under tiden är det bara att lära dig att använda allt ordentligt. Förstår det?"

"Ja tack, Ellie."