यदि मेरे पास एक ही कक्षा में 2 सिंक्रनाइज़ किए गए तरीके हैं, लेकिन प्रत्येक अलग-अलग चर को एक्सेस कर रहा है, तो क्या 2 धागे एक ही समय में उन 2 विधियों तक पहुंच सकते हैं? क्या लॉक ऑब्जेक्ट पर होता है, या क्या यह सिंक्रनाइज़ेशन विधि के अंदर चर के रूप में विशिष्ट है?
उदाहरण:
class X {
private int a;
private int b;
public synchronized void addA(){
a++;
}
public synchronized void addB(){
b++;
}
}
क्या 2 धागे कक्षा X के प्रदर्शन का एक ही उदाहरण x.addA(
) और x.addB()
एक ही समय में उपयोग कर सकते हैं?
synchronized (this)
के शरीर के चारों ओर एक ब्लॉक होने पर विधि पर सिंक्रनाइज़ करना कार्यात्मक रूप से समतुल्य है । ऑब्जेक्ट "यह" लॉक नहीं हो जाता है, बल्कि ऑब्जेक्ट "इस" को म्यूटेक्स के रूप में उपयोग किया जाता है और शरीर को अन्य कोड खंडों के साथ समवर्ती रूप से निष्पादित करने से रोका जाता है। यह "यह" के अन्य क्षेत्रों / विधियों पर कोई प्रभाव नहीं है जो सिंक्रनाइज़ नहीं हैं।