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

"आता मी तुम्हाला झोप, उत्पन्न आणि सामील होण्याच्या पद्धतींबद्दल थोडेसे सांगेन."

"हे कंटाळवाणे आहे. मला आत्ताच एक मुलाखत प्रश्न सापडला: ' उत्पन्न (), झोप (), आणि प्रतीक्षा () पद्धतींमध्ये काय फरक आहे ?'. तुम्ही ते स्पष्ट करू शकाल का?"

"काही हरकत नाही. प्रथम, या तीन पूर्णपणे भिन्न पद्धती आहेत."

1) स्लीप (टाइमआउट)  - टाइमआउट पॅरामीटरने दर्शविलेल्या मिलिसेकंदांच्या संख्येसाठी वर्तमान थ्रेड (ज्यावर स्लीप कॉल केला होता) थांबवते. थ्रेड नंतर TIMED_WAITING स्थितीत जातो. जर isInterrupted ध्वज सेट केला असेल तर पद्धत लवकर समाप्त होऊ शकते.

उदाहरण वर्णन
Thread.sleep(500);
वर्तमान थ्रेड 500 मिलीसेकंद किंवा 0.5 सेकंदांसाठी स्वतःची अंमलबजावणी निलंबित करते.

2) yield()  – सध्याचा धागा 'त्याचे वळण वगळतो'. धागा चालू स्थितीतून तयार स्थितीत जातो आणि JVM पुढील थ्रेडवर जातो. चालू आणि तयार राज्ये ही RUNNABLE राज्याची उप-राज्ये आहेत.

उदाहरण वर्णन
Thread.yield();
सध्याचा थ्रेड "त्याची वळण वगळतो" आणि Java लगेच पुढील थ्रेडवर स्विच करते.

३) प्रतीक्षा (कालबाह्य) – ही प्रतीक्षा () पद्धतीची  आवृत्ती आहे , परंतु कालबाह्यतेसह. " प्रतीक्षा पद्धत फक्त वर्तमान थ्रेडद्वारे लॉक केलेल्या म्युटेक्स ऑब्जेक्टवर सिंक्रोनाइझ केलेल्या ब्लॉकमध्ये कॉल केली जाऊ शकते . अन्यथा, पद्धत एक बेकायदेशीर मॉनिटरस्टेट अपवाद टाकते.

"या पद्धतीला कॉल केल्याने म्युटेक्स ऑब्जेक्टचे लॉक रिलीझ केले जाते, ज्यामुळे ते दुसर्‍या थ्रेडला प्राप्त करण्यासाठी उपलब्ध होते. शिवाय, थ्रेड प्रतीक्षा स्थितीत प्रवेश करतो (पॅरामीटर्सशिवाय प्रतीक्षा() पद्धतीसाठी) किंवा TIMED_WAITING स्थिती (प्रतीक्षा (टाइमआउट) साठी ) पद्धत)."

उदाहरण वर्णन
Object monitor = getMonitor();
synchronized(monitor)
{monitor.wait(500);}
जेव्हा प्रतीक्षा पद्धत कॉल केली जाते, तेव्हा वर्तमान थ्रेड मॉनिटर ऑब्जेक्टचे लॉक सोडतो आणि 500 ​​मिलिसेकंदांसाठी झोपतो. मॉनिटर ऑब्जेक्ट दुसर्या थ्रेडद्वारे प्राप्त केला जाऊ शकतो.
500 मिलिसेकंदांनंतर, थ्रेड जागृत होईल आणि मॉनिटर व्यस्त नसल्यास, थ्रेड ते मिळवेल आणि कार्य करणे सुरू ठेवेल.
जर मॉनिटर दुसर्‍या थ्रेडने लॉक केला असेल, तर वर्तमान थ्रेड ब्लॉक केलेल्या स्थितीवर जाईल.

४) सामील व्हा (कालबाह्य)

"ही पद्धत तुमच्या प्रश्नात नव्हती, पण ती माझ्या पाठ योजनेत आहे, म्हणून मी तुम्हाला त्याबद्दल सांगेन. तुम्ही join() किंवा join(timeout) पद्धतीला कॉल करता तेव्हा, सध्याचा थ्रेड थ्रेडशी 'संलग्न' असतो. ज्याला ही पद्धत म्हणतात. सध्याचा थ्रेड स्लीप होतो आणि जो थ्रेड जोडला जातो तो पूर्ण होईपर्यंत थांबतो (म्हणजे ज्या थ्रेडची join() पद्धत कॉल केली होती).

"सध्याचा थ्रेड join() पद्धतीसाठी WAITING स्थितीत आणि join(timeout) पद्धतीसाठी TIMED_WAITING स्थितीत प्रवेश करतो."

उदाहरण वर्णन
Thread thread = getWorkThread();
thread.join(500);
वर्तमान थ्रेड workerThread थ्रेडमध्ये सामील होईल आणि तो समाप्त होण्याची प्रतीक्षा करेल.
पण ते ५०० मिलिसेकंदांनंतर 'अनजॉइन' होईल आणि चालू राहील.

"प्रतीक्षा(टाइमआउट) आणि जॉइन(टाइमआउट) पद्धतींमधील कालबाह्य म्हणजे पद्धत झोपेत जाते आणि कशाची तरी प्रतीक्षा करते, परंतु मिलिसेकंदांमध्ये दिलेल्या टाइमआउटपेक्षा जास्त वेळ नाही. नंतर ती उठते."

"असे दिसते की या पद्धतींमध्ये एकच गोष्ट साम्य आहे ती म्हणजे कालबाह्य. ते पूर्णपणे भिन्न गोष्टी करतात."

"हो, बरोबर आहे."