सबसे पहले मुझे जोर दें कि सिंक्रनाइज़ेशन के लिए उपयोग किए जाने वाले चर को संशोधित करना बहुत खराब बात ™ है। obj1
final
होना चाहिए और यदि इसे मॉनिटर के रूप में उपयोग किया जाता है तो कभी भी स्पर्श नहीं किया जाना चाहिए।
कहा जा रहा है, वापस अपने प्रश्न का:
JVM पहले Thread1 निष्पादित करता है, यह obj1
पर सिंक्रनाइज़ करता है, null
और धागा बाहर निकलता है के लिए यह तय करता है। दूसरा धागा obj1
, NullPointerException
पर सिंक्रनाइज़ करना चाहता है। चूंकि obj1
का संशोधन सिंक्रनाइज़ किए गए ब्लॉक में किया गया था, इसलिए यह गारंटी दी जाती है कि थ्रेड 2 अपडेट किए गए मान को देखेगा (इसलिए: NullPointerException
की गारंटी है)।
Thread1 obj1
पर ताला प्राप्त करने के बाद, लेकिन संदर्भ साफ़ करने से पहले बाधित हो जाए, Thread2 obj1
पर ताला और जब तक प्रतीक्षा करें Thread1 समाप्त हो जाएगा। फिर यह सफलतापूर्वक मॉनीटर में प्रवेश करेगा क्योंकि पहले obj1
द्वारा संदर्भित ऑब्जेक्ट अभी भी मौजूद है।
स्रोत
2012-04-17 16:22:25
@ KorhanÖztürk वह खुद को आजमा नहीं सकता था, किसी भी प्रकार की सहमति से संबंधित मुद्दा गैर निर्धारक नहीं है। जब संदर्भ ज्ञात नहीं है तो इस प्रकार की टिप्पणियां बेहद निराशाजनक होती हैं। –