पद्धतियां ठीक उसी मॉनिटर पर सिंक्रनाइज़ किए जाते हैं, तो वे एक साथ अलग धागे में निष्पादित नहीं कर सकता। जब दूसरा धागा मॉनीटर एंट्री (इस मामले में सिंक्रनाइज़ किए गए विधि की शुरुआत) पर आता है, तो यह तब तक अवरुद्ध होगा जब तक कि पहला थ्रेड मॉनीटर को रिलीज़ न करे।
इस मामले में अवरुद्ध धागे की वास्तविक राज्य, के रूप में JConsole द्वारा रिपोर्ट, हो जाएगा की तरह java.lang.Thread.State: WAITING (on object monitor)
मान लिया जाये कि सभी तरीकों सामान्य उदाहरण तरीके हैं कुछ है, तो वे एक ही मॉनिटर साझा करेंगे जब एक ही पर लागू ऑब्जेक्ट।यही कारण है, अगर आप की तरह कुछ था:
// Thread 1
A a1 = new A();
a1.m1();
// Thread 2
A a2 = new A();
a2.m2()
तो इस मामले में, दूसरा धागा विधि कॉल करने में सक्षम है, क्योंकि यह a2
वस्तु है, जो नहीं है की अंतर्निहित मॉनिटर प्राप्त करने के लिए कोशिश कर रहा है हो जाएगा थ्रेड 1 द्वारा लॉक किया गया। लेकिन अगर थ्रेड 2 ने a1.m2()
पर कॉल करने का प्रयास किया, तो यह तब तक अवरुद्ध होगा जब तक थ्रेड 1 ने m1()
निष्पादित नहीं किया था।
आप स्थिर तरीकों है, तो वे (मेरे काल्पनिक नामकरण मामले में A.class
) वर्ग के ही स्पष्ट नजर रखने प्राप्त है, इसलिए किसी भी उदाहरण विधि आमंत्रण द्वारा अवरुद्ध नहीं किया जाएगा।
स्रोत
2010-07-01 17:08:59
पर दिखाई दे रहे हैं, लेकिन अगर हम ऐसा कुछ करते हैं तो क्या? अंतिम टेस्ट tt1 = नया टेस्ट(); अंतिम टेस्ट tt2 = नया टेस्ट(); थ्रेड टी 1 = नया थ्रेड() {सार्वजनिक शून्य रन() {tt1.m1(); }}; थ्रेड टी 2 = नया थ्रेड() {सार्वजनिक शून्य रन() {tt2.m2(); }}; – Prem
मैं एक ही चीज़ चलाता हूं और मुझे आउटपुट के रूप में TIMED_WAIT मिल गया .... – Prem
@aioobe सिंक्रनाइज़ कोड ब्लॉक (विधियों नहीं) के मामले में क्या होता है। क्या दो थ्रेड एक ही ऑब्जेक्ट के दो अलग-अलग सिंक्रनाइज़ कोड ब्लॉक को समवर्ती रूप से एक्सेस कर सकते हैं? – yuva