में वापस पाने के यह एक वकालत प्रतिमान कि इंतजार() एक तुल्यकालन ब्लॉक के अंदर थोड़ी देर के पाश अंदर लागू किया जाना चाहिए।इंतजार कैसे करता है() ताला जावा
मेरे सवाल यह है कि प्रतीक्षा() धागा ताला वापस पाने के है?
// Thread 1
synchronized (mon) {
while (!condition)
mon.wait();
// Do something
}
//Thread 2
synchronized (mon) {//set condition appropriately
mon.notify();
}
धागे को पहले 1 रन पर विचार करें और स्थिति की प्रतीक्षा करना शुरू करें। यह लॉक जारी करता है और थ्रेड 2 लॉक को स्थिति सेट करता है और थ्रेड को सूचित करता है 1. अब थ्रेड 1 लॉक हो जाता है, स्थिति की जांच करता है और "कुछ करें" निष्पादित करना शुरू करता है।
मेरा प्रश्न यह है कि जब थ्रेड 1 अधिसूचित किया जाता है तो यह समय की स्थिति से निष्पादन शुरू करता है, सिंक्रनाइज़ (सोम) कोड की रेखा को फिर से निष्पादित नहीं किया जाता है तो थ्रेड 1 लॉक कैसे प्राप्त करता है? आंतरिक गतिशीलता क्या हैं जो लॉक को थ्रेड 1 पर वापस देती हैं?
+1। –
@ नाथन: मुझे लगता है कि हम जवाब जानते हैं :-) हम जावा डॉक के इस हिस्से को नहीं (कम से कम मुझे समझ में नहीं आता): इस प्रकार, * {@code प्रतीक्षा} विधि से वापस लौटने पर, सिंक्रनाइज़ेशन ऑब्जेक्ट की स्थिति और * थ्रेड {@code टी} ठीक उसी तरह है जब {@code प्रतीक्षा} विधि * लागू की गई थी। – Geek
@ गीक: आप क्या समझते नहीं हैं? प्रतीक्षा विधि से निकलने से थ्रेड को एक सिंक्रनाइज़ ब्लॉक में रखा जाता है, इसलिए इसे पहले लॉक प्राप्त करने की आवश्यकता होती है। अन्यथा यह लॉक प्राप्त किए बिना सिंक्रनाइज़ किए गए ब्लॉक में कोड निष्पादित करेगा। –