उदाहरण में मेथड और मेथड बी उदाहरण विधियाँ हैं (जैसा कि स्टैटिक विधियों के विपरीत)। synchronized
इंस्टेंस मेथड पर डालने का मतलब है कि थ्रेड को उस ऑब्जेक्ट पर किसी भी कोड को निष्पादित करना शुरू करने से पहले जिस ऑब्जेक्ट पर कॉल किया जाता है, उस ऑब्जेक्ट पर लॉक ("आंतरिक लॉक") प्राप्त करना होगा।
यदि आपके पास दो अलग-अलग उदाहरण विधियाँ हैं, जो सिंक्रनाइज़ किए गए हैं और अलग-अलग थ्रेड्स एक ही ऑब्जेक्ट पर समवर्ती रूप से उन विधियों को कॉल कर रहे हैं, तो वे थ्रेड्स एक ही लॉक के लिए प्रतिस्पर्धा करेंगे। एक बार एक थ्रेड लॉक हो जाता है अन्य सभी थ्रेड्स उस ऑब्जेक्ट पर सभी सिंक्रनाइज़ किए गए इंस्टेंस तरीकों से बंद हो जाते हैं।
दो तरीकों को समवर्ती रूप से चलाने के लिए उन्हें अलग-अलग तालों का उपयोग करना होगा, जैसे:
class A {
private final Object lockA = new Object();
private final Object lockB = new Object();
public void methodA() {
synchronized(lockA) {
//method A
}
}
public void methodB() {
synchronized(lockB) {
//method B
}
}
}
जहाँ सिंक्रोनाइज़्ड ब्लॉक सिंटैक्स एक विशिष्ट ऑब्जेक्ट को निर्दिष्ट करने की अनुमति देता है जिसे ब्लॉक में प्रवेश करने के लिए निष्पादित थ्रेड को आंतरिक लॉक प्राप्त करने की आवश्यकता होती है।
समझने की महत्वपूर्ण बात यह है कि भले ही हम अलग-अलग तरीकों पर "सिंक्रनाइज़" कीवर्ड डाल रहे हैं, लेकिन मूल अवधारणा पर्दे के पीछे आंतरिक ताला है।
यहां बताया गया है कि जावा ट्यूटोरियल रिलेशनशिप के बारे में बताता है:
आंतरिक आंतरिक लॉक या मॉनिटर लॉक के रूप में जानी जाने वाली आंतरिक इकाई के आसपास सिंक्रोनाइज़ेशन का निर्माण किया जाता है। (एपीआई विनिर्देश अक्सर इस इकाई को केवल "मॉनिटर" के रूप में संदर्भित करता है) आंतरिक ताले सिंक्रनाइज़ेशन के दोनों पहलुओं में एक भूमिका निभाते हैं: किसी वस्तु की स्थिति के लिए अनन्य पहुंच को लागू करना और ऐसा होना चाहिए-पहले रिश्ते जो दृश्यता के लिए आवश्यक हैं।
हर वस्तु में एक आंतरिक ताला लगा होता है। कन्वेंशन द्वारा, एक थ्रेड जिसे किसी ऑब्जेक्ट के फ़ील्ड में अनन्य और लगातार एक्सेस की आवश्यकता होती है, उन्हें एक्सेस करने से पहले ऑब्जेक्ट के आंतरिक लॉक का अधिग्रहण करना पड़ता है, और फिर आंतरिक लॉक को तब जारी करते हैं जब यह उनके साथ हो जाता है। यह कहा जाता है कि लॉक को प्राप्त करने और लॉक जारी करने के बीच के समय में एक धागे को आंतरिक लॉक कहा जाता है। जब तक एक धागा एक आंतरिक लॉक का मालिक होता है, कोई भी अन्य धागा एक ही लॉक का अधिग्रहण नहीं कर सकता है। जब वह ताला प्राप्त करने का प्रयास करेगा तो दूसरा धागा अवरुद्ध हो जाएगा।
लॉकिंग का उद्देश्य साझा डेटा की रक्षा करना है। आप अलग-अलग ताले का उपयोग करेंगे जैसा कि ऊपर दिए गए उदाहरण कोड में दिखाया गया है यदि प्रत्येक लॉक अलग-अलग डेटा सदस्यों को सुरक्षित रखता है।