
तुलना चार्ट
तुलना के लिए आधार | नींद | रुकिए |
---|---|---|
बुनियादी | नींद की विधि एक वस्तु पर ताला जारी नहीं करती है जब तक कि यह बाधित न हो। | प्रतीक्षा विधि ऑब्जेक्ट पर ताला जारी करती है ताकि अन्य ऑब्जेक्ट्स को सूचित या अधिसूचित होने तक निष्पादित किया जा सके। |
कक्षा | स्लीप विधि को थ्रेड क्लास में परिभाषित किया गया है। | प्रतीक्षा विधि को ऑब्जेक्ट क्लास में परिभाषित किया गया है। |
सिंक्रनाइज़ | नींद की विधि को सिंक्रोनाइज़्ड संदर्भ के भीतर नहीं कहा जाना चाहिए। | प्रतीक्षा पद्धति को सिंक्रोनाइज़्ड संदर्भ के भीतर बुलाया जाना है। |
समापन | स्लीप मेथड का निष्पादन तब पूरा होता है जब कोई थ्रेड इसे बाधित करता है या स्लीप मेथड का समय समाप्त हो जाता है। | सूचना () या InformAll () विधि के बीच में रुकने पर प्रतीक्षा विधि का निष्पादन पूर्ण हो जाता है। |
स्थिर | नींद विधि एक स्थिर विधि है। | प्रतीक्षा विधि स्थिर नहीं है इसलिए इसे लागू करने के लिए वस्तु की आवश्यकता है। |
क्रियान्वयन | नींद की विधि को वर्तमान धागे पर निष्पादित किया जाता है। | प्रतीक्षा विधि को ऑब्जेक्ट पर निष्पादित किया जाता है। |
अपवाद | InterruptedException | IllegalArgumentException, IllegalMonitorStateException, InterruptedException। |
स्लीप मेथड की परिभाषा
नींद विधि थ्रेड वर्ग की स्थिर विधि है। नींद की विधि का उपयोग तब किया जाता है जब कोई थ्रेड किसी विशेष राशि के लिए कोई कार्य नहीं करना चाहता है। नींद की विधि अपने निष्पादन को पूरा करती है या तो जब विधि का समय समाप्त हो जाता है, या यह निष्पादन में किसी अन्य थ्रेड द्वारा बाधित होता है। नींद की विधि पूरी होने के बाद, थ्रेड फिर से अपनी चल स्थिति प्राप्त करता है। नीचे दिखाए अनुसार नींद की विधि से दो हैं।
सार्वजनिक स्थैतिक देशी शून्य नींद (लंबी मिलीसेकंड); सार्वजनिक स्थैतिक शून्य नींद (लंबी मिलीसेकंड और इंट नैनोसेकंड);
उपरोक्त दो रूप में, आप देख सकते हैं कि नींद विधि के रूप में समय का उल्लेख किया गया है। ऐसा इसलिए है क्योंकि एक धागा हमेशा पैरामीटर में उल्लिखित किसी विशेष समय के लिए सोता है। इसके निष्पादन के दौरान किसी अन्य धागे द्वारा नींद की विधि को बाधित किया जा सकता है; इसलिए, यह बाधित कर सकता है। आपको यह ध्यान रखना चाहिए कि अपवाद को ब्लॉक / थ्रू कीवर्ड द्वारा आज़माया गया है या अन्यथा उसे संभाल कर रखा गया है, यह संकलन समय त्रुटि को जन्म देगा। नींद की विधि निष्पादन में वर्तमान ऑब्जेक्ट पर ताला रखती है और किसी अन्य ऑब्जेक्ट को तब तक निष्पादित करने की अनुमति नहीं देती है जब तक कि वह अपने निष्पादन को पूरा नहीं करता है।
प्रतीक्षा विधि की परिभाषा
प्रतीक्षा ऑब्जेक्ट क्लास में परिभाषित विधि है। प्रतीक्षा विधि का उपयोग तब किया जाता है जब कई कार्य (थ्रेड) एक ही समय में एक ही संसाधन के लिए संघर्ष कर रहे हों। प्रतीक्षा विधि जब इसे लागू करती है तो प्रतीक्षा विधि को लागू करने वाली वस्तु पर ताला छोड़ देती है। और किसी अन्य ऑब्जेक्ट को एक अधिसूचित विधि लागू होने तक निष्पादित करने का मौका प्रदान करें जो प्रतीक्षा विधि द्वारा जारी किए गए ऑब्जेक्ट पर लॉक को फिर से शुरू करता है। प्रतीक्षा विधि का निम्न रूप है।
रुकिए(); प्रतीक्षा (लंबी मिलीसेकंड); प्रतीक्षा (लंबी मिलीसेकंड, इंट नेनोसेकंड);
प्रतीक्षा पद्धति के उपरोक्त तीन रूपों की तरह, पहली विधि में कोई समय पैरामीटर नहीं है इसका अर्थ है कि प्रतीक्षा विधि का निष्पादन सूचना तक चलेगा, या InformAll विधि लागू नहीं होगी। बाकी दो तरीकों में समय पैरामीटर होता है। इसलिए वे तब तक निष्पादित करेंगे जब तक कि समय समाप्त हो जाता है या जब तक अधिसूचित या noitfyAll विधि लागू नहीं हो जाती है, समय समाप्त होने से पहले। प्रतीक्षा पद्धति अपवादों को फेंक सकती है। यदि समय तर्क पारित किया जाता है, तो IllegalArgumentException नकारात्मक है। IllegalMonitorStateException, यदि वर्तमान थ्रेड संसाधन का उपयोग नहीं कर रहा है। InterruptedException, यदि प्रतीक्षा विधि बाधित है।
जावा में नींद और प्रतीक्षा विधि के बीच महत्वपूर्ण अंतर
- नींद और प्रतीक्षा विधि को अलग करने वाली मुख्य बात यह है कि नींद की विधि वस्तु पर तब तक ताला लगाती है जब तक कि वह बाधित न हो जाए या उसका समय समाप्त न हो जाए। हालांकि, प्रतीक्षा विधि उस ऑब्जेक्ट पर ताला जारी करती है जो इसे लागू करती है और अन्य वस्तुओं को निष्पादित करने का मौका देती है।
- स्लीप क्लास को थ्रेड क्लास में परिभाषित किया जाता है, जबकि वेट क्लास क्लास में वेट मेथड को परिभाषित किया जाता है।
- नींद की विधि को समकालिक संदर्भ से नहीं बुलाया जाना चाहिए। लेकिन प्रतीक्षा विधि को सिंक्रनाइज़ से बुलाया जाना चाहिए।
- यदि विधि का समय समाप्त हो गया है या यह दूसरे धागे से बाधित है, तो नींद की विधि जागृत होती है। प्रतीक्षा विधि जागृत होती है
जब सभी विधि सूचित या सूचित की जाती है। - नींद की विधि स्थिर विधि है, जबकि, प्रतीक्षा विधि एक स्थिर विधि नहीं है ।
- नींद की विधि को वर्तमान थ्रेड पर निष्पादित किया जाता है, जबकि, प्रतीक्षा विधि को उस ऑब्जेक्ट पर निष्पादित किया जाता है जो इसे लागू करता है।
- स्लीप मेथड द्वारा फेंका गया अपवाद इंटरप्टेड एक्ससेप्शन है जबकि वेट मेथड के थ्रू अपवाद इललीगल एर्गुमेंट एक्ससेप्शन , इललीगलमोनिटरस्टेटटेसेप्शन, इंटरप्टेड एक्ससेप्शन हैं ।
निष्कर्ष:
जब एक से अधिक थ्रेड्स एक ही संसाधन का उपयोग करना चाहते हैं, तो प्रतीक्षा विधि का उपयोग किया जाना चाहिए। जब कोई धागा कोई कार्य नहीं करना चाहता है, तो नींद की विधि का उपयोग करना चाहिए।