मेरे पास जावा क्लास में दो विधियां हैं जिनमें दोनों कोड का एक ब्लॉक है जो एक ही ऑब्जेक्ट का उपयोग करके सिंक्रनाइज़ करता है। मैं समझता हूं कि एक थ्रेड द्वारा प्राप्त जावा सिंक्रनाइज़ेशन स्कीम लॉक में पुनर्विक्रेता है। इसके साथ मैं सुरक्षित रूप से कह सकता हूं कि कोड के नीचे के टुकड़े से सभी मामलों में कोई समस्या नहीं आएगी?सिंक्रनाइज़ कथन के साथ पुनर्वित्त सिंक्रनाइज़ेशन व्यवहार
public class Someclass
{
private static final Object LCK_OBJ = new Object();
//.....
publc void method1()
{
//some code....
synchronized(LCK_OBJ)
{
//some sychronized code.
method2(..);
}
//some more code....
}
protected static final void method2(..)
{
Someclass ref = null;
//some code which gets different other references of SomeClass in a loop....
ref.method3(..);
}
publc void method3()
{
//some code....
synchronized(LCK_OBJ)
{
//some sychronized code.
}
//some more code....
}
}//end of class
धन्यवाद टॉमस स्टैंजाक! जब मैं नमूना कोड टाइप कर रहा था, तो ऑब्जेक्ट संदर्भ के माध्यम से इंस्टेंस विधि आमंत्रण टाइप करना चूक गया था। इसके बारे में क्षमा करें और उत्तर के लिए धन्यवाद। बस मेरी पिछली क्वेरी में जोड़ने के लिए यदि कोई अन्य थ्रेड विधि 1 या विधि 3 में सिंक्रनाइज़ कोड निष्पादित करने का प्रयास करता है, जब थ्रेड वर्तमान में विधि 2 (विधि 1 से आवेदक) के अंदर निष्पादित कर रहा है, तो हम यह सुनिश्चित करने के लिए कह सकते हैं कि दूसरा थ्रेड पहले तक अवरुद्ध हो जाएगा निष्पादन विधि 1, विधि 2 और विधि 3 खत्म करता है? – Muthu
हां, लॉक जारी होने तक यह अवरुद्ध हो जाएगा, और ऐसा तब होगा जब पहला थ्रेड विधि 3 और विधि 2 से लौटने के बाद विधि 1 में सिंक्रनाइज़ ब्लॉक को छोड़ देता है। –