"Hi, Amigo!"

"Sa aking mga nakaraang aralin, minsan ginagamit ko ang mga salitang 'mutex' at 'monitor', ngayon ay oras na upang sabihin sa iyo kung ano ang ibig sabihin nito."

"Nakikinig ako."

"Ang mutex ay isang espesyal na bagay para sa pag-synchronize ng mga thread/proseso. Mayroon itong dalawang posibleng estado: abala at libre. Sa simpleng bagay, ang mutex ay isang boolean variable na maaaring magkaroon ng dalawang value: busy (true) at libre (false)."

"Kapag ang isang thread ay gustong kumuha ng pagmamay-ari ng isang bagay, minarkahan nito ang mutex ng bagay bilang abala. At kapag natapos na itong magtrabaho kasama ang bagay, minarkahan nito ang mutex nito bilang libre."

"Sa madaling salita, ang mutex ay parang 'busy/free' sign sa pinto?"

"Oo. At ang gayong mutex ay nauugnay sa bawat bagay sa Java. Tanging ang Java machine lamang ang may direktang access sa mutex. Ito ay nakatago mula sa programmer."

"Paano natin ito gagamitin?"

"Sa Java, maaari tayong magtrabaho sa isang mutex sa pamamagitan ng isang monitor."

"Ang monitor ay isang espesyal na mekanismo (piraso ng code) na naka-layer sa ibabaw ng isang mutex. Ginagarantiya nito ang wastong pakikipag-ugnayan sa mutex. Hindi sapat na markahan ang isang bagay bilang abala. Kailangan pa rin upang matiyak na ang ibang mga thread ay hindi sumusubok na gamitin ang abalang bagay."

"Sa Java, ipinapatupad ang mga monitor gamit ang keyword na naka-synchronize."

"Kapag sumulat ka ng isang naka-synchronize na bloke, pinapalitan ito ng Java compiler ng tatlong piraso ng code:"

1) Sa simula ng naka-synchronize na block, idinagdag ang code na nagmamarka sa mutex bilang abala.

2)  Sa dulo ng naka-synchronize na bloke, idinagdag ang code na nagmamarka sa mutex bilang libre.

3)  Bago ang naka-synchronize na block, idinagdag ang code na, kung abala ang mutex, nagiging sanhi ng paghihintay ng thread hanggang sa mailabas ang mutex.

"Narito ang halos kung paano ito gumagana:"

Code Paano ito gumagana Paglalarawan
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

Natutulog ang thread hangga't abala ang mutex
(lumalabas kami sa loop kapag inilabas ang mutex). Markahan ang mutex bilang abala.

Isagawa ang doTask();

Markahan ang mutex bilang libre

"In reality, iba at mas kumplikado ang logic doon. Pero mga detalye lang ito."

"Pwede ko bang makuha ang mga detalye?"

"Hanggang sa matutunan mo kung paano gamitin ito ng maayos, walang saysay na magkagulo sa mga detalye."

"Isang pares ng mga antas pabalik ay binigyan kita ng isang listahan ng lahat ng mga estado ng thread na may mga transition arrow at isang listahan ng mga pamamaraan na nakakaapekto sa estadong ito. Marami ka bang naaalala?"

"Hindi naman. Mabilis ko lang nakalimutan ang lahat..."

"Ang mas kaunting pagsasanay na ginagawa mo, mas mababa ang iyong nakikinabang sa teorya."

"Sa Level 40, matututunan mo kung paano gamitin ang lahat ng ito, at ipapaliwanag ko kung paano talaga gumagana ang lahat ng ito. Pansamantala, matuto lang na gamitin ang lahat ng ito nang maayos. Nakuha mo ba?"

"Oo, salamat, Ellie."