थ्रेड लाइफ साइकिल और थ्रेड स्टेट्स - 1

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

"हम एक नया विषय शुरू करने जा रहे हैं: सूत्र।"

"चलिए शुरू करते हैं। आज हम उन राज्यों की जांच करेंगे कि एक थ्रेड चल रहा है जब एक थ्रेड ऑब्जेक्ट गुजरता है (या गुजर सकता है)। "

"आप अभी कितने राज्यों का नाम ले सकते हैं, एमिगो?"

"दो। पहला प्रारंभ () विधि से पहले एक धागा है: वस्तु मौजूद है, लेकिन धागा अभी तक सक्रिय नहीं है। और दूसरा प्रारंभ () विधि के बाद कहा गया है: जब धागा कुछ कर रहा है महत्वपूर्ण।"

"आप सही कह रहे हैं - इस तरह का अंतर है। इन राज्यों को नया और चालू कहा जाता है , लेकिन यह सिर्फ शुरुआत है।"

"पहले, किसी बिंदु पर थ्रेड चलना समाप्त कर देगा, जिसका अर्थ है कि ऐसी स्थिति हो सकती है जहां थ्रेड ऑब्जेक्ट मौजूद है, लेकिन थ्रेड नई या चालू स्थिति में नहीं है।" यह स्थिति, जहां थ्रेड चलना समाप्त हो गया है, कहा जाता है समाप्त ।"

"लेकिन वहाँ अधिक है। यह मत भूलो कि किसी भी समय केवल एक धागा वास्तव में चल रहा है। जो एक साथ काम करता प्रतीत होता है वह वास्तव में प्रोसेसर लगातार थ्रेड से थ्रेड पर कूद रहा है। जब थ्रेड लगता है तो इसके लिए एक अलग स्थिति होती है। चल रहा है, लेकिन वास्तव में अपनी बारी का इंतजार कर रहा है: इसे रेडी-टू-रन कहा जाता है । एक थ्रेड के रूप में काम करता है, यह लगातार चलने से तैयार पर स्विच करता है, और फिर से सक्रिय होने पर वापस चलने के लिए।

" प्रारंभ () विधि को कॉल करने के तुरंत बाद , थ्रेड को रेडी-टू-रन स्थिति सौंपी जाती है और उन थ्रेड्स की साझा सूची में रखा जाता है जिनके बीच JVM स्विच करता है।"

"यह बहुत मुश्किल नहीं है। इससे पहले कि यह चलना शुरू करे, इसकी नई अवस्था है। इसके समाप्त होने के बाद, इसे समाप्त कर दिया जाता है । जब यह चल रहा होता है, तो धागा चालू अवस्था में होता है; फिर जब यह प्रतीक्षा कर रहा होता है, तो यह तैयार अवस्था में होता है। "

"आपकी संक्षिप्तता अद्भुत है, लेकिन आप सही हैं।"

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

"यहाँ राज्यों के साथ यह स्थिति कैसी दिखती है:"

थ्रेड लाइफ साइकिल और थ्रेड स्टेट्स - 2

"लेकिन वहाँ अधिक है। एक अलग स्थिति भी है जिसे वेटिंग कहा जाता है । यह तब होता है जब एक थ्रेड ब्लॉक नहीं होता है , लेकिन तैयार भी नहीं होता है । उदाहरण के लिए, जब आप किसी अन्य थ्रेड पर ज्वाइन () विधि कहते हैं।"

जब हम किसी अन्य थ्रेड ऑब्जेक्ट पर ज्वाइन () कॉल करते हैं, तो ऐसा लगता है जैसे हमारा थ्रेड "जॉइन" करता है, लेकिन वास्तव में यह दूसरे थ्रेड के समाप्त होने का इंतजार करता है।

"इसके अतिरिक्त, प्रतीक्षा () विधि भी है (प्रतीक्षा/अधिसूचना/विधियों की सभी तिकड़ी से), जो एक थ्रेड को प्रतीक्षा स्थिति में स्विच करती है जब इसे कहा जाता है।"

"वाह।"

"एक मिनट रुको! और भी बहुत कुछ है। एक थ्रेड स्लीप मेथड को कॉल करके सो सकता है, उदाहरण के लिए। इसके लिए एक अलग स्थिति भी है। इसे «टाइम्ड वेटिंग» कहा जाता है। «टाइम्ड वेटिंग» का मतलब है कि थ्रेड किसी चीज़ के लिए इंतज़ार कर रहा है एक सीमित समय। यदि आप प्रतीक्षा (टाइमआउट) या जॉइन (टाइमआउट) जैसे पैरामीटर के साथ प्रतीक्षा विधि कहते हैं, तो थ्रेड समय-प्रतीक्षा स्थिति में प्रवेश करेगा।

"यहाँ पूरा आरेख है:"

थ्रेड लाइफ साइकिल और थ्रेड स्टेट्स - 3

"हम्म। बस इतना ही? या फिर 10 और दिलचस्प राज्य हैं?"

"अभी के लिए, बस इतना ही।"

"व्यवहार में, आप केवल पहले आरेख को याद रख सकते हैं। यह सरल है। लेकिन दूसरा अधिक सटीक है।"

"आश्चर्यजनक रूप से पर्याप्त, इंटरनेट पर बहुत सारे थ्रेड स्टेट आरेख हैं, और वे सभी अलग हैं।"

"यही कारण है कि मैंने आपको यह चित्र दिया है - यह सबसे पूर्ण और सही है।"

"इस आरेख में, तैयार और चलने वाले राज्यों को रननेबल नामक एक ब्लॉक में जोड़ा जाता है। क्या आप जानते हैं क्यों?"

"नहीं। यह पहली बार है जब मैंने ऐसा कुछ देखा है।"

" थ्रेड क्लास में एक आंतरिक वर्ग है जिसे राज्य कहा जाता है , साथ ही एक सार्वजनिक राज्य गेटस्टेट () विधि है।"

उदाहरण
public enum State
{
 NEW,
 RUNNABLE,
 BLOCKED,
 WAITING,
 TIMED_WAITING,
 TERMINATED;
}

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

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

"और मैं किस परिस्थिति में इसका उपयोग करूंगा?"

"सबसे अधिक संभावना है, कभी नहीं।"

"लेकिन आपको यह जानना होगा कि थ्रेड्स के अंदर क्या चल रहा है। अन्यथा, आपके पास बहुत सारी बग होंगी, और आप अनुमान लगाने में भी सक्षम नहीं होंगे कि उन्हें क्या हो रहा है।"

"इसके अलावा, नियोक्ता साक्षात्कार के दौरान थ्रेड स्टेट्स के बारे में पूछना पसंद करते हैं।"