"Bună, Amigo!"

„În lecțiile mele anterioare, am folosit uneori cuvintele „mutex” și „monitor”, acum este timpul să vă spun ce înseamnă.”

„Sunt toată urechile”.

"Un mutex este un obiect special pentru sincronizarea firelor de execuție/procese. Are două stări posibile: ocupat și liber. Simplu, un mutex este o variabilă booleană care poate avea două valori: ocupat (adevărat) și liber (fals)."

„Când un fir vrea să preia proprietatea asupra unui obiect, marchează mutexul obiectului ca ocupat. Și când termină de lucru cu obiectul, își marchează mutexul ca liber.”

„Cu alte cuvinte, un mutex este ca un semn „ocupat/liber” pe ușă?

"Da. Și un astfel de mutex este asociat cu fiecare obiect din Java. Numai mașina Java are acces direct la mutex. Este ascuns de programator."

„Atunci cum îl folosim?”

„În Java, putem lucra cu un mutex printr-un monitor.”

„Un monitor este un mecanism special (piesă de cod) stratificată deasupra unui mutex. Acesta garantează o interacțiune adecvată cu mutexul. Nu este suficient să marcați un obiect ca ocupat. Este totuși necesar să vă asigurați că alte fire nu încearcă să folosește obiectul ocupat”.

„În Java, monitoarele sunt implementate folosind cuvântul cheie sincronizat”.

„Când scrieți un bloc sincronizat, compilatorul Java îl înlocuiește cu trei bucăți de cod:”

1) La începutul blocului sincronizat se adaugă codul care marchează mutex-ul ca ocupat.

2)  La sfârșitul blocului sincronizat se adaugă codul care marchează mutex-ul ca liber.

3)  Înainte de blocul sincronizat, se adaugă cod care, dacă mutex-ul este ocupat, determină firul să aștepte până când mutex-ul este eliberat.

„Iată aproximativ cum funcționează:”

Cod Cum functioneaza Descriere
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Firul doarme atâta timp cât mutex-ul este ocupat
(ieșim din buclă când mutex-ul este eliberat). Marcați mutexul ca ocupat.

Executați doTask();

Marcați mutexul ca liber

"În realitate, logica de acolo este diferită și mai complicată. Dar acestea sunt doar detalii."

— Pot să am detalii?

„Până nu înveți cum să-l folosești corect, nu are rost să te încurci în detalii.”

„Cu câteva nivele în urmă, ți-am dat o listă cu toate stările firelor cu săgeți de tranziție și o listă de metode care afectează această stare. Îți amintești multe?”

"Nu chiar. Am uitat totul atât de repede..."

„Cu cât faci mai puțină practică, cu atât beneficiezi mai puțin de pe urma teoriei.”

„Până la nivelul 40, vei învăța cum să folosești toate acestea, iar eu îți voi explica cum funcționează de fapt toate acestea. Între timp, învață doar să le folosești corect. Ai înțeles?”

— Da, mulţumesc, Ellie.