"हाय, अमिगो!"

"माझ्या मागील धड्यांमध्ये, मी कधीकधी 'म्युटेक्स' आणि 'मॉनिटर' शब्द वापरले होते, आता त्यांचा अर्थ काय ते सांगण्याची वेळ आली आहे."

"मी सर्व कान आहे."

" म्युटेक्स हे थ्रेड्स/प्रोसेस सिंक्रोनाइझ करण्यासाठी एक विशेष ऑब्जेक्ट आहे. त्याच्या दोन संभाव्य अवस्था आहेत: व्यस्त आणि विनामूल्य. सोप्या भाषेत, म्यूटेक्स एक बुलियन व्हेरिएबल आहे ज्याची दोन मूल्ये असू शकतात: व्यस्त (सत्य) आणि मुक्त (खोटे).

"जेव्हा थ्रेडला एखाद्या वस्तूची मालकी घ्यायची असते, तेव्हा ते ऑब्जेक्टच्या म्युटेक्सला व्यस्त म्हणून चिन्हांकित करते. आणि जेव्हा ते ऑब्जेक्टसह कार्य पूर्ण करते, तेव्हा ते त्याचे म्यूटेक्स विनामूल्य म्हणून चिन्हांकित करते."

"दुसर्‍या शब्दात, म्युटेक्स हे दारावरील 'व्यस्त/मुक्त' चिन्हासारखे आहे?"

"होय. आणि असा म्युटेक्स Java मधील प्रत्येक ऑब्जेक्टशी निगडीत असतो. फक्त Java मशीनला म्युटेक्समध्ये थेट प्रवेश असतो. ते प्रोग्रामरपासून लपलेले असते."

"मग ते कसे वापरायचे?"

"जावामध्ये, आम्ही मॉनिटरद्वारे म्यूटेक्ससह कार्य करू शकतो."

"मॉनिटर ही एक विशेष यंत्रणा आहे (कोडचा तुकडा) म्युटेक्सच्या वर स्तरित. तो म्यूटेक्सशी योग्य परस्परसंवादाची हमी देतो. एखादी वस्तू व्यस्त म्हणून चिन्हांकित करणे पुरेसे नाही. इतर थ्रेड्स प्रयत्न करत नाहीत याची खात्री करणे अद्याप आवश्यक आहे. व्यस्त वस्तू वापरा."

"जावामध्ये, संकालित कीवर्ड वापरून मॉनिटर्स लागू केले जातात."

"जेव्हा तुम्ही सिंक्रोनाइझ केलेला ब्लॉक लिहिता, तेव्हा Java कंपाइलर कोडच्या तीन तुकड्यांसह बदलतो:"

1) सिंक्रोनाइझ ब्लॉकच्या सुरुवातीला, कोड जोडला जातो जो म्यूटेक्सला व्यस्त म्हणून चिन्हांकित करतो.

2)  सिंक्रोनाइझ केलेल्या ब्लॉकच्या शेवटी, कोड जोडला जातो जो म्यूटेक्सला विनामूल्य म्हणून चिन्हांकित करतो.

3)  सिंक्रोनाइझ ब्लॉक करण्यापूर्वी, कोड जोडला जातो ज्यामुळे, जर म्यूटेक्स व्यस्त असेल, तर थ्रेडला म्यूटेक्स रिलीज होईपर्यंत प्रतीक्षा करावी लागेल.

"ते कसे कार्य करते ते येथे आहे:"

कोड हे कसे कार्य करते वर्णन
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

जोपर्यंत म्युटेक्स व्यस्त असतो तोपर्यंत थ्रेड झोपतो
(म्युटेक्स सोडल्यावर आम्ही लूपमधून बाहेर पडतो). म्युटेक्स व्यस्त म्हणून चिन्हांकित करा.

doTask चालवा();

म्युटेक्स विनामूल्य म्हणून चिन्हांकित करा

"प्रत्यक्षात, तिथले तर्क वेगळे आणि अधिक क्लिष्ट आहेत. पण हे फक्त तपशील आहेत."

"मला तपशील मिळेल का?"

"जोपर्यंत तुम्ही ते योग्यरित्या कसे वापरायचे हे शिकत नाही तोपर्यंत तपशीलांमध्ये गुंतण्यात काही अर्थ नाही."

"काही लेव्हल मागे मी तुम्हाला ट्रांझिशन अॅरोसह सर्व थ्रेड स्टेटची यादी आणि या स्थितीवर परिणाम करणाऱ्या पद्धतींची यादी दिली आहे. तुम्हाला बरेच काही आठवते का?"

"खरंच नाही. मी इतक्या लवकर सगळं विसरतो..."

"तुम्ही जितका कमी सराव कराल तितका तुम्हाला सिद्धांताचा कमी फायदा होईल."

"लेव्हल 40 पर्यंत, तुम्ही हे सर्व कसे वापरायचे ते शिकाल आणि हे सर्व प्रत्यक्षात कसे कार्य करते हे मी समजावून सांगेन. दरम्यान, फक्त ते सर्व योग्यरित्या वापरायला शिका. समजले?"

"हो, धन्यवाद, एली."