किसी वस्तु लॉकिंग के संदर्भ में इन दो उदाहरणों के बीच अंतर के बारे में समझाएं सकता है:सिंक्रनाइज़ धागे और लॉकिंग
public void method1(){
synchronized(this){
....
}
}
और
StringBuffer aStringBufferObject = new StringBuffer("A");
public void method2(){
synchronized(aStringBufferObject){
....
}
}
मैं पहला उदाहरण पता पर एक ताला प्राप्त करेंगे this
उदाहरण और दूसरा AStringBufferObject उदाहरण का लॉक प्राप्त करेगा। लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि दोनों का प्रभाव या अंतर क्या है।
उदाहरण के लिए, दूसरे उदाहरण में, क्या थ्रेड अभी भी सिंक्रनाइज़ किए गए ब्लॉक के अंदर कोड निष्पादित करने में सक्षम होंगे क्योंकि लॉक 'इस' उदाहरण से संबंधित नहीं है?
मुझे पता है कि एक विधि या कोड के ब्लॉक को सिंक्रनाइज़ करना एक ही समय में उस ब्लॉक/विधि तक पहुंचने के लिए कई धागे को रोकता है लेकिन वस्तु को लॉक करने के लिए निर्दिष्ट करने का उद्देश्य क्या है और वस्तु के तरीके में क्या अंतर है उपरोक्त उदाहरणों में निर्दिष्ट है?
यह भी देखें [सिंक्रनाइज़ किए गए तरीके और थ्रेड लॉकिंग] (http://forums.oracle.com/forums/thread.jspa?threadID=2257647)। –
यहां एक नज़र डालें: [जावा कंसुरेंसी/मल्टीथ्रेडिंग - ट्यूटोरियल] (http://www.vogella.de/articles/JavaConcurrency/article.html) –
@ एंड्रयू: आह, हालांकि आप एक लेख का जिक्र कर रहे थे, लेकिन अब देखें कि यह एक बहु-पोस्ट है। –