"హాయ్, అమిగో!"

"నా మునుపటి పాఠాలలో, నేను కొన్నిసార్లు 'మ్యూటెక్స్' మరియు 'మానిటర్' అనే పదాలను ఉపయోగించాను, ఇప్పుడు వాటి అర్థం ఏమిటో మీకు చెప్పాల్సిన సమయం వచ్చింది."

"నేను అన్ని చెవులు."

" మ్యూటెక్స్ అనేది థ్రెడ్‌లు/ప్రాసెస్‌లను సమకాలీకరించడానికి ఒక ప్రత్యేక వస్తువు. దీనికి రెండు సాధ్యమైన స్థితులు ఉన్నాయి: బిజీ మరియు ఫ్రీ. సాధారణంగా చెప్పాలంటే, మ్యూటెక్స్ అనేది బూలియన్ వేరియబుల్, ఇది రెండు విలువలను కలిగి ఉంటుంది: బిజీ (నిజం) మరియు ఉచిత (తప్పుడు)."

"ఒక థ్రెడ్ ఒక వస్తువు యొక్క యాజమాన్యాన్ని తీసుకోవాలనుకున్నప్పుడు, అది ఆబ్జెక్ట్ యొక్క మ్యూటెక్స్‌ను బిజీగా ఉన్నట్లు గుర్తు చేస్తుంది. మరియు అది ఆబ్జెక్ట్‌తో పని చేయడం పూర్తయినప్పుడు, అది దాని మ్యూటెక్స్‌ను ఫ్రీగా సూచిస్తుంది."

"మరో మాటలో చెప్పాలంటే, మ్యూటెక్స్ అనేది తలుపు మీద ఉన్న 'బిజీ/ఫ్రీ' గుర్తు లాంటిదేనా?"

"అవును. మరియు అటువంటి మ్యూటెక్స్ జావాలోని ప్రతి వస్తువుతో అనుబంధించబడి ఉంటుంది. కేవలం జావా మెషీన్ మాత్రమే మ్యూటెక్స్‌కి నేరుగా యాక్సెస్‌ను కలిగి ఉంటుంది. ఇది ప్రోగ్రామర్ నుండి దాచబడింది."

"అప్పుడు మనం దానిని ఎలా ఉపయోగించాలి?"

"జావాలో, మేము మానిటర్ ద్వారా మ్యూటెక్స్‌తో పని చేయవచ్చు."

"మానిటర్ అనేది మ్యూటెక్స్ పైన లేయర్‌లుగా ఉన్న ఒక ప్రత్యేక మెకానిజం (కోడ్ ముక్క). ఇది మ్యూటెక్స్‌తో సరైన పరస్పర చర్యకు హామీ ఇస్తుంది. ఒక వస్తువును బిజీగా ఉన్నట్లు గుర్తించడం సరిపోదు. ఇతర థ్రెడ్‌లు ప్రయత్నించకుండా చూసుకోవడం ఇప్పటికీ అవసరం. బిజీగా ఉన్న వస్తువును ఉపయోగించండి."

"జావాలో, మానిటర్లు సమకాలీకరించబడిన కీవర్డ్ ఉపయోగించి అమలు చేయబడతాయి."

"మీరు సమకాలీకరించబడిన బ్లాక్‌ను వ్రాసినప్పుడు, జావా కంపైలర్ దానిని మూడు కోడ్ ముక్కలతో భర్తీ చేస్తుంది:"

1) సమకాలీకరించబడిన బ్లాక్ ప్రారంభంలో, మ్యూటెక్స్‌ను బిజీగా ఉన్నట్లు గుర్తించే కోడ్ జోడించబడుతుంది.

2)  సమకాలీకరించబడిన బ్లాక్ చివరిలో, మ్యూటెక్స్‌ను ఫ్రీగా గుర్తించే కోడ్ జోడించబడుతుంది.

3)  సమకాలీకరించబడిన బ్లాక్‌కు ముందు, మ్యూటెక్స్ బిజీగా ఉన్నట్లయితే, మ్యూటెక్స్ విడుదలయ్యే వరకు థ్రెడ్ వేచి ఉండేలా కోడ్ జోడించబడుతుంది.

"ఇది సుమారుగా ఎలా పని చేస్తుందో ఇక్కడ ఉంది:"

కోడ్ అది ఎలా పని చేస్తుంది వివరణ
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

మ్యూటెక్స్ బిజీగా ఉన్నంత కాలం థ్రెడ్ నిద్రపోతుంది
(మ్యూటెక్స్ విడుదలైనప్పుడు మేము లూప్ నుండి నిష్క్రమిస్తాము). మ్యూటెక్స్‌ని బిజీగా ఉన్నట్లు గుర్తించండి.

doTask();

మ్యూటెక్స్‌ను ఫ్రీగా గుర్తించండి

"వాస్తవానికి, అక్కడ తర్కం భిన్నంగా ఉంటుంది మరియు మరింత క్లిష్టంగా ఉంటుంది. కానీ ఇవి కేవలం వివరాలు మాత్రమే."

"నేను వివరాలు పొందగలనా?"

"మీరు దీన్ని సరిగ్గా ఎలా ఉపయోగించాలో నేర్చుకునే వరకు, వివరాలలో చిక్కుకోవడంలో అర్థం లేదు."

"నేను మీకు పరివర్తన బాణాలతో కూడిన అన్ని థ్రెడ్ స్టేట్‌ల జాబితాను మరియు ఈ స్థితిని ప్రభావితం చేసే పద్ధతుల జాబితాను అందించాను. మీకు చాలా గుర్తుందా?"

"నిజంగా కాదు. నేను అన్నీ త్వరగా మర్చిపోతాను..."

"మీరు తక్కువ సాధన చేస్తే, మీరు సిద్ధాంతం నుండి తక్కువ ప్రయోజనం పొందుతారు."

"స్థాయి 40 నాటికి, మీరు వీటన్నింటిని ఎలా ఉపయోగించాలో నేర్చుకుంటారు మరియు వాస్తవానికి ఇవన్నీ ఎలా పనిచేస్తాయో నేను వివరిస్తాను. ఈలోగా, అన్నింటినీ సరిగ్గా ఉపయోగించడం నేర్చుకోండి. అర్థమైందా?"

"అవును, ధన్యవాదాలు, ఎల్లీ."