थ्रेड लाइफ सायकल आणि थ्रेड स्टेटस - १

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

"आम्ही एक नवीन विषय सुरू करणार आहोत: थ्रेड्स."

"चला सुरुवात करूया. आज आपण थ्रेड चालू असताना थ्रेड ऑब्जेक्ट कोणत्या स्थितीतून जातो (किंवा त्यामधून जाऊ शकतो) तपासू."

"तुम्ही सध्या किती राज्यांची नावे सांगू शकता, अमिगो?"

"दोन. start() पद्धत कॉल करण्यापूर्वी पहिला थ्रेड आहे: ऑब्जेक्ट अस्तित्वात आहे, परंतु थ्रेड अद्याप सक्रिय नाही. आणि दुसरा start() पद्धत कॉल केल्यानंतर: जेव्हा थ्रेड काहीतरी करत आहे महत्वाचे."

"तुम्ही बरोबर आहात—असा फरक आहे. या राज्यांना नवीन आणि चालू असे म्हणतात , पण ही फक्त सुरुवात आहे."

"प्रथम, एखाद्या वेळी थ्रेड चालणे पूर्ण होईल, याचा अर्थ अशी परिस्थिती असू शकते जिथे थ्रेड ऑब्जेक्ट अस्तित्त्वात आहे, परंतु थ्रेड नवीन किंवा चालू स्थितीत नाही." या स्थितीला, जेथे थ्रेड चालणे पूर्ण झाले आहे, या स्थितीला म्हणतात. संपुष्टात आले ."

"पण अजून बरेच काही आहे. कोणत्याही वेळी फक्त एकच धागा चालू असतो हे विसरू नका. एकाच वेळी काम करताना दिसते ते म्हणजे प्रोसेसर सतत एका थ्रेडवरून दुसऱ्या थ्रेडवर उडी मारत असतो. जेव्हा धागा दिसतो तेव्हा त्याची वेगळी अवस्था असते. धावत आहे, परंतु प्रत्यक्षात त्याच्या वळणाची वाट पाहत आहे: याला रेडी-टू-रन असे म्हणतात . थ्रेड कार्य करत असताना, तो सतत धावण्यापासून तयार वर स्विच होतो आणि नंतर पुन्हा सक्रिय झाल्यावर पुन्हा चालू होतो."

" स्टार्ट () मेथड कॉल केल्यानंतर लगेच , थ्रेडला रन-टू-रन स्थिती नियुक्त केली जाते आणि JVM दरम्यान स्विच केलेल्या थ्रेडच्या सामायिक सूचीमध्ये ठेवली जाते."

"ते फार कठीण नाही. ते चालू होण्यापूर्वी, त्याची नवीन स्थिती असते. ती संपल्यानंतर, ती संपुष्टात येते . जेव्हा तो चालू असतो, तेव्हा धागा चालू स्थितीत असतो; नंतर जेव्हा तो प्रतीक्षा करत असतो तेव्हा तो तयार अवस्थेत असतो. ."

"तुमची संक्षिप्तता आश्चर्यकारक आहे, परंतु तुम्ही बरोबर आहात."

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

"राज्यांमध्ये ही परिस्थिती कशी दिसते ते येथे आहे:"

थ्रेड लाइफ सायकल आणि थ्रेड स्टेटस - 2

"पण आणखी काही आहे. प्रतीक्षा नावाची एक वेगळी स्थिती देखील आहे . जेव्हा एखादा थ्रेड ब्लॉक केला जात नाही , परंतु तयार देखील नसतो . उदाहरणार्थ, जेव्हा तुम्ही दुसर्‍या थ्रेडवर join () पद्धत कॉल करता तेव्हा."

जेव्हा आपण दुसर्‍या थ्रेड ऑब्जेक्टवर join() कॉल करतो, तेव्हा आपला थ्रेड त्याला "जॉइन" करतो, परंतु प्रत्यक्षात तो दुसरा थ्रेड पूर्ण होण्याची वाट पाहतो.

"याव्यतिरिक्त, प्रतीक्षा () पद्धत देखील आहे (प्रतीक्षा/सूचना/सूचना या सर्व पद्धतींच्या त्रिकूटातून), जे थ्रेडला कॉल केल्यावर प्रतीक्षा स्थितीवर स्विच करते."

"व्वा."

"एक मिनिट थांबा! अजून बरेच काही आहे. उदाहरणार्थ, स्लीप मेथडला कॉल करून थ्रेड झोपू शकतो. यासाठी एक वेगळी स्थिती देखील आहे. त्याला «वेळबद्ध प्रतीक्षा» म्हणतात. «वेळ प्रतीक्षा » म्हणजे थ्रेड कशाची तरी वाट पाहत आहे मर्यादित वेळ. जर तुम्ही प्रतिक्षा पद्धतीला पॅरामीटरसह कॉल केल्यास, जसे की प्रतीक्षा(टाइमआउट) किंवा जॉइन(टाइमआउट), तर थ्रेड वेळेवर प्रतीक्षा करण्याच्या स्थितीत प्रवेश करेल."

"संपूर्ण आकृती येथे आहे:"

थ्रेड लाइफ सायकल आणि थ्रेड स्टेटस - 3

"हम्म. एवढेच आहे का? किंवा आणखी 10 मनोरंजक राज्ये आहेत?"

"आत्तासाठी, तेच आहे."

"सरावात, तुम्ही फक्त पहिला आकृती लक्षात ठेवू शकता. ते सोपे आहे. परंतु दुसरा अधिक अचूक आहे."

"विचित्रपणे, इंटरनेटवर बरेच थ्रेड स्टेट डायग्राम आहेत आणि ते सर्व भिन्न आहेत."

"म्हणूनच मी तुम्हाला हा आराखडा दिला - तो सर्वात परिपूर्ण आणि योग्य आहे."

"या आकृतीमध्ये, तयार आणि चालू असलेल्या अवस्था एकाच ब्लॉकमध्ये एकत्रित केल्या आहेत ज्याला रननेबल म्हणतात. तुम्हाला का माहित आहे?"

"नाही. मी पहिल्यांदाच असं काहीतरी पाहिलंय."

" थ्रेड क्लासमध्ये स्टेट नावाचा अंतर्गत वर्ग आहे , तसेच सार्वजनिक राज्य getState() पद्धत आहे."

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

"तुम्ही नेहमी थ्रेड ऑब्जेक्टवर getState () पद्धतीला कॉल करू शकता आणि तिची सद्यस्थिती शोधू शकता. आणि अर्थातच, ते राज्य एनम मूल्यांपैकी एक असेल."

"मला दिसत आहे. त्यामुळे, वास्तविक स्थिती JVM मध्ये आहेत, परंतु अशी राज्ये देखील आहेत की तुम्ही जावा कोडद्वारे राज्य getState() पद्धत वापरून प्रवेश करू शकता."

"आणि मी ते कोणत्या परिस्थितीत वापरेन?"

"बहुधा, कधीच नाही."

"परंतु तुम्हाला थ्रेड्समध्ये काय चालले आहे हे माहित असणे आवश्यक आहे. अन्यथा, तुमच्याकडे बरेच बग असतील आणि ते कशामुळे होत आहेत याचा अंदाज देखील तुम्ही लावू शकणार नाही."

"तसेच, नियोक्त्यांना मुलाखती दरम्यान थ्रेड स्टेट्सबद्दल विचारणे आवडते."