– Szia Amigo!

– Előző óráimon néha használtam a „mutex” és a „monitor” szavakat, most itt az ideje, hogy elmondjam, mit jelentenek.

"Csupa fül vagyok."

"A mutex egy speciális objektum a szálak/folyamatok szinkronizálására. Két lehetséges állapota van: foglalt és szabad. Leegyszerűsítve a dolgokat, a mutex egy logikai változó, amelynek két értéke lehet: foglalt (igaz) és szabad (hamis)."

"Amikor egy szál egy objektum tulajdonjogát akarja átvenni, az objektum mutexét foglaltként jelöli meg. Amikor pedig befejezi a munkát az objektummal, szabadnak jelöli meg a mutexét."

"Más szóval a mutex olyan, mint egy "foglalt/szabad" tábla az ajtón?

"Igen. És egy ilyen mutex minden Java objektumhoz kapcsolódik. Csak a Java gépnek van közvetlen hozzáférése a mutexhez. A programozó elől rejtve van."

– Akkor hogyan használjuk?

"Javában egy monitoron keresztül tudunk mutex-el dolgozni."

"A monitor egy speciális mechanizmus (kóddarab), amely egy mutex tetejére van rétegezve. Garantálja a megfelelő interakciót a mutex-szel. Nem elég egy objektumot foglaltként megjelölni. Még mindig biztosítani kell, hogy más szálak ne próbálják meg használja a foglalt objektumot."

"A Java-ban a monitorokat a szinkronizált kulcsszóval valósítják meg."

"Amikor szinkronizált blokkot ír, a Java fordító három kóddal helyettesíti:"

1) A szinkronizált blokk elején egy kód kerül hozzáadásra, amely a mutexet foglaltnak jelöli.

2)  A szinkronizált blokk végén egy kód kerül hozzáadásra, amely a mutexet szabadnak jelöli.

3)  A szinkronizált blokk előtt egy kód kerül hozzáadásra, amely ha a mutex foglalt, akkor a szál megvárja, amíg a mutex felszabadul.

"Nagyjából a következőképpen működik:"

Kód Hogyan működik Leírás
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

A szál addig alszik, amíg a mutex foglalt
(a mutex felengedésekor kilépünk a hurokból). Jelölje meg a mutexet foglaltnak.

A doTask();

Jelölje meg a mutexet szabadként

"A valóságban az ottani logika más és bonyolultabb. De ezek csak részletek."

– Megkaphatom a részleteket?

"Amíg nem tanulja meg megfelelően használni, nincs értelme belegabalyodni a részletekbe."

"Pár szinttel ezelőtt adtam egy listát az összes szálállapotról átmenet nyilakkal, és egy listát azokról a metódusokról, amelyek befolyásolják ezt az állapotot. Sok mindenre emlékszel?"

– Nem igazán. Olyan gyorsan elfelejtek mindent…

"Minél kevesebbet gyakorolsz, annál kevésbé profitálsz az elméletből."

"A 40. szintig megtanulja, hogyan kell mindezt használni, és elmagyarázom, hogyan is működik ez az egész. Addig is tanulja meg helyesen használni az egészet. Megérte?"

– Igen, köszönöm, Ellie.