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

"मेरे पिछले पाठों में, मैंने कभी-कभी 'म्यूटेक्स' और 'मॉनीटर' शब्दों का इस्तेमाल किया था, अब यह आपको बताने का समय है कि उनका क्या मतलब है।"

"मेरा कान है।"

"एक म्यूटेक्स थ्रेड्स/प्रक्रियाओं को सिंक्रनाइज़ करने के लिए एक विशेष वस्तु है। इसकी दो संभावित स्थितियाँ हैं: व्यस्त और मुक्त। सरल शब्दों में, एक म्यूटेक्स एक बूलियन चर है जिसमें दो मान हो सकते हैं: व्यस्त (सत्य) और मुक्त (झूठा)।"

"जब कोई थ्रेड किसी ऑब्जेक्ट का स्वामित्व लेना चाहता है, तो यह ऑब्जेक्ट के म्यूटेक्स को व्यस्त के रूप में चिह्नित करता है। और जब यह ऑब्जेक्ट के साथ काम करना समाप्त कर लेता है, तो यह म्यूटेक्स को फ्री के रूप में चिह्नित करता है।"

"दूसरे शब्दों में, एक म्यूटेक्स दरवाजे पर 'व्यस्त/मुक्त' संकेत जैसा है?"

"हाँ। और ऐसा म्यूटेक्स जावा में हर वस्तु के साथ जुड़ा हुआ है। केवल जावा मशीन की म्यूटेक्स तक सीधी पहुँच है। यह प्रोग्रामर से छिपा हुआ है।"

"फिर हम इसका उपयोग कैसे करें?"

"जावा में, हम एक मॉनिटर के माध्यम से म्यूटेक्स के साथ काम कर सकते हैं।"

"एक मॉनिटर एक विशेष तंत्र (कोड का टुकड़ा) एक म्यूटेक्स के शीर्ष पर स्तरित है। यह म्यूटेक्स के साथ उचित बातचीत की गारंटी देता है। किसी वस्तु को व्यस्त के रूप में चिह्नित करने के लिए पर्याप्त नहीं है। यह सुनिश्चित करना अभी भी आवश्यक है कि अन्य धागे प्रयास न करें व्यस्त वस्तु का उपयोग करें।"

"जावा में, मॉनिटर्स को कीवर्ड सिंक्रोनाइज़ करके लागू किया जाता है।"

"जब आप एक सिंक्रनाइज़ ब्लॉक लिखते हैं, तो जावा कंपाइलर इसे कोड के तीन टुकड़ों से बदल देता है:"

1) सिंक्रनाइज़ किए गए ब्लॉक की शुरुआत में, कोड जोड़ा जाता है जो म्यूटेक्स को व्यस्त के रूप में चिह्नित करता है।

2)  सिंक्रोनाइज़्ड ब्लॉक के अंत में, कोड जोड़ा जाता है जो म्यूटेक्स को फ्री के रूप में चिह्नित करता है।

3)  सिंक्रनाइज़ ब्लॉक से पहले, कोड जोड़ा जाता है, जो म्यूटेक्स व्यस्त होने पर थ्रेड को म्यूटेक्स जारी होने तक प्रतीक्षा करने का कारण बनता है।

"यहां मोटे तौर पर यह कैसे काम करता है:"

कोड यह काम किस प्रकार करता है विवरण
synchronized(object)
{

object.doJob();

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

object.mutex = true;

object.doJob();

object.mutex = false;

जब तक म्यूटेक्स व्यस्त रहता है तब तक धागा सोता है
(म्यूटेक्स जारी होने पर हम लूप से बाहर निकलते हैं)। म्यूटेक्स को व्यस्त के रूप में चिह्नित करें।

कार्य निष्पादित करें ();

म्यूटेक्स को मुफ़्त के रूप में चिह्नित करें

"वास्तव में, तर्क अलग और अधिक जटिल है। लेकिन ये केवल विवरण हैं।"

"क्या मेरे पास विवरण हो सकता है?"

"जब तक आप इसे ठीक से उपयोग करना नहीं सीखते, तब तक विवरणों में उलझने का कोई मतलब नहीं है।"

"कुछ स्तर पहले मैंने आपको संक्रमण तीरों के साथ सभी थ्रेड स्टेट्स की एक सूची दी थी और इस स्थिति को प्रभावित करने वाली विधियों की एक सूची दी थी। क्या आपको बहुत कुछ याद है?"

"वास्तव में नहीं। मैं इतनी जल्दी सब कुछ भूल जाता हूँ ..."

"आप जितना कम अभ्यास करेंगे, आपको सिद्धांत से उतना ही कम लाभ होगा।"

"स्तर 40 तक, आप सीखेंगे कि इन सबका उपयोग कैसे करना है, और मैं समझाऊंगा कि यह सब वास्तव में कैसे काम करता है। इस बीच, बस इसे ठीक से उपयोग करना सीखें। समझे?"

"हाँ, धन्यवाद, ऐली।"