"हाय, अमीगो!"

"अब मैं आपको नींद, उपज और जुड़ने के तरीकों के बारे में कुछ बताऊँगा।"

"यह उबाऊ है। मुझे अभी एक साक्षात्कार प्रश्न मिला: ' यील्ड (), नींद (), और प्रतीक्षा () विधियों के बीच क्या अंतर है ?'। क्या आप इसे समझा सकते हैं?"

"कोई बात नहीं। सबसे पहले, ये तीन पूरी तरह से अलग तरीके हैं।"

1) स्लीप (टाइमआउट)  - टाइमआउट पैरामीटर द्वारा इंगित मिलीसेकंड की संख्या के लिए वर्तमान थ्रेड (जिस पर स्लीप कॉल किया गया था) को रोकता है। थ्रेड तब TIMED_WAITING स्थिति में चला जाता है। यदि isInterrupted फ़्लैग सेट है, तो विधि पहले समाप्त हो सकती है।

उदाहरण विवरण
Thread.sleep(500);
वर्तमान थ्रेड 500 मिलीसेकंड या 0.5 सेकंड के लिए अपने स्वयं के निष्पादन को निलंबित करता है।

2) उपज ()  - वर्तमान धागा 'अपनी बारी छोड़ देता है'। थ्रेड रनिंग स्टेट से रेडी स्टेट तक जाता है , और JVM अगले थ्रेड के लिए आगे बढ़ता है। रनिंग और रेडी स्टेट्स रननेबल स्टेट के सब-स्टेट हैं ।

उदाहरण विवरण
Thread.yield();
वर्तमान धागा "अपनी बारी छोड़ देता है" और जावा तुरंत अगले धागे पर स्विच हो जाता है।

3) प्रतीक्षा करें (समय समाप्त)  - यह प्रतीक्षा () विधि का एक संस्करण है, लेकिन समय समाप्त होने के साथ। " प्रतीक्षा विधि को केवल वर्तमान थ्रेड द्वारा लॉक किए गए म्यूटेक्स ऑब्जेक्ट पर सिंक्रनाइज़ किए गए ब्लॉक के भीतर ही कॉल किया जा सकता है। अन्यथा, विधि एक अवैध मॉनिटरस्टेट अपवाद फेंकता है।

"इस विधि को कॉल करने से म्यूटेक्स ऑब्जेक्ट का लॉक रिलीज़ हो जाता है, जिससे इसे प्राप्त करने के लिए एक और थ्रेड के लिए उपलब्ध हो जाता है। इसके अलावा, थ्रेड प्रतीक्षा स्थिति में प्रवेश करता है (पैरामीटर के बिना प्रतीक्षा() विधि के लिए) या TIMED_WAITING स्थिति (प्रतीक्षा के लिए (टाइमआउट) ) तरीका)।"

उदाहरण विवरण
Object monitor = getMonitor();
synchronized(monitor)
{
 …
 monitor.wait(500);
 …
}
जब प्रतीक्षा पद्धति को कॉल किया जाता है, तो वर्तमान थ्रेड मॉनिटर ऑब्जेक्ट के लॉक को रिलीज़ करता है और 500 मिलीसेकंड के लिए सोता है। मॉनिटर ऑब्जेक्ट को दूसरे थ्रेड द्वारा अधिग्रहित किया जा सकता है।
500 मिलीसेकंड के बाद, थ्रेड जाग जाएगा और यदि मॉनिटर व्यस्त नहीं है, तो थ्रेड इसे प्राप्त कर लेगा और काम करना जारी रखेगा।
यदि मॉनिटर किसी अन्य थ्रेड द्वारा लॉक किया गया है, तो वर्तमान थ्रेड ब्लॉक की गई स्थिति में बदल जाएगा।

4) शामिल हों (टाइमआउट)

"यह विधि आपके प्रश्न में नहीं थी, लेकिन यह मेरी पाठ योजना में है, इसलिए मैं आपको इसके बारे में बताऊंगा। जब आप ज्वाइन() या ज्वाइन (टाइमआउट) विधि कहते हैं, तो वर्तमान थ्रेड थ्रेड से 'संलग्न' होता है जिसे इस विधि कहा जाता है। वर्तमान धागा सो जाता है और उस धागे तक प्रतीक्षा करता है जब तक कि यह समाप्त होने में शामिल हो जाता है (अर्थात वह धागा जिसका जुड़ाव () विधि कहा जाता था)।

"वर्तमान थ्रेड जॉइन () विधि के लिए WAITING स्थिति और जॉइन (टाइमआउट) विधि के लिए TIMED_WAITING स्थिति में प्रवेश करता है।"

उदाहरण विवरण
Thread thread = getWorkThread();
thread.join(500);
वर्तमान थ्रेड वर्कर थ्रेड में शामिल हो जाएगा और इसके समाप्त होने की प्रतीक्षा करेगा।
लेकिन यह 500 मिलीसेकंड के बाद 'अनजॉइन' हो जाएगा और चलता रहेगा।

"वेट (टाइमआउट) और जॉइन (टाइमआउट) मेथड्स में टाइमआउट का मतलब है कि मेथड सो जाता है और किसी चीज का इंतजार करता है, लेकिन मिलीसेकंड में दिए गए टाइमआउट से ज्यादा नहीं। फिर यह जाग जाता है।"

"ऐसा लगता है कि इन विधियों में केवल एक चीज समान है, वह है टाइमआउट। वे पूरी तरह से अलग चीजें करते हैं।"

"हाँ, यह सही है।"