जब हम क्या यह मुझे यह भी लगता है कि मेरा थ्रेड स्थिति भी अलग है। उदाहरण के लिए, यदि मेरा धागा मेरी चिंता ब्लॉकिंग - एक संसाधन पर अवरुद्ध है, बाधित नहीं किया जा सकता है इंतजार - एक संसाधन पर अवरुद्ध है, लेकिन बाधित या अधिसूचित या अप्रकाशित किया जा सकता है। जैसा कि आप देख सकते हैं कि WAITING दूसरे प्रसंस्कृत से नियंत्रण के लिए बेहतर है। जैसे यदि दो थ्रेड डेडलॉक हो गए हैं तो आप एक अवरोध () को तोड़ सकते हैं सिंक्रनाइज़ किए गए एक दो धागे के साथ आप फंस गए हैं। सिंक्रनाइज़ किए गए बनाम लॉक का व्यवहार बहुत ही समान है और सटीक विवरण बड़े संशोधन के बीच बदल जाता है। मेरी सलाह का उपयोग करना है P> सरल कोड के लिए सिंक्रनाइज़ जहां आपको थ्रेड सुरक्षा की आवश्यकता है लेकिन बहुत कम ताला विवाद है। लॉक का उपयोग करें जहां आपने पहचान लिया है कि आपके पास है विवाद को रोकें, या आपको tryLock जैसी अतिरिक्त कार्यक्षमता की आवश्यकता है यदि आप करते हैं प्रिंट राज्य प्रतीक्षा थ्रेड के लिए थ्रेड स्थिति निम्न विधियों में से किसी एक को कॉल करने के कारण एक थ्रेड प्रतीक्षा स्थिति में है: प्रतीक्षा स्थिति में एक धागा एक विशेष कार्रवाई करने के लिए दूसरे थ्रेड के लिए इंतजार कर रहा है। उदाहरण के लिए, किसी ऑब्जेक्ट पर ऑब्जेक्ट.वेट () को एक थ्रेड जो ऑब्जेक्ट पर ऑब्जेक्ट.नोटिफ़ाइज़ () या ऑब्जेक्ट.नोटिफ़ाइफ () को कॉल करने के लिए दूसरे थ्रेड के लिए प्रतीक्षा कर रहा है। धागे जो Thread.join () नामक एक निर्दिष्ट थ्रेड को समाप्त करने के लिए प्रतीक्षा कर रहा है। lock.lock () कॉल करते हैं या
सिंक्रनाइज़ < / कोड> हमारे थ्रेड ब्लॉकों को ब्लॉक करें अगर कोई अन्य धागा पहले से उस लॉक को ले लिया है अब मेरा प्रश्न है, जब हम
lock.lock () के कार्यान्वयन पर विचार करते हैं, तब यह प्रतिनिधि AQS को लॉक प्राप्त करता है जो वास्तव में वर्तमान थ्रेड को पार्क करता है (ताकि इसे शेड्यूलर द्वारा निर्धारित नहीं किया जा सकता है)।
सिंक्रनाइज़ अवरुद्ध भी है?
सिंक्रनाइज़ ब्लॉक पर अवरुद्ध है, तो यह
ब्लॉकिंग होगा, जबकि मैंने
lock.lock () को बुलाया है, तो यह होगा हो
प्रतीक्षा क्या मैं सही हूं?
थ्रेड.स्टेटस के पहलुओं में दो लॉकिंग रणनीतियों और व्यस्त इंतजार के बजाय पार्किंग द्वारा प्रदर्शन में सुधार के बीच अंतर है
ReentrantLock.lock ();
सिंक्रनाइज़ {/ * कुछ कोड * /}
अंतिम लॉक लॉक = नया रीट्रेंट लॉक (); lock.lock (); थ्रेड टी = नया थ्रेड (नया रननाबल ()) {@Override सार्वजनिक शून्य चला () {try.lockInterruptibly ();} पकड़ (बाधित ईक्सेप्शन ई) {e.printStackTrace ();}}}); t.start (); Thread.Sleep (100); System.out.println (टी + "है" + टी.गेटस्टेट ()); लॉक करो लॉक खोलो();
थ्रेड [थ्रेड -0,5, मुख्य] इंतजार कर रहा है
No comments:
Post a Comment