"यहाँ एक नया और दिलचस्प विषय है।"
"यह पता चला है कि आप विभिन्न तरीकों से धागे शुरू कर सकते हैं।"
"एक मानक कार्यक्रम (केवल एक धागे के साथ) चलना बंद हो जाता है जब मुख्य धागा अपना काम पूरा कर लेता है। मुख्य धागा निष्पादन समाप्त कर देता है, कार्यक्रम समाप्त हो जाता है, और जेवीएम अपनी स्मृति को मुक्त करता है।"
"यदि हम एक चाइल्ड थ्रेड लॉन्च करते हैं, तो प्रोग्राम चलता रहता है, भले ही मुख्य थ्रेड समाप्त हो जाए। JVM तब तक समाप्त नहीं होता है जब तक कि कम से कम एक थ्रेड चल रहा हो। एक बार सभी रनिंग थ्रेड समाप्त हो जाने के बाद, प्रोग्राम बंद हो जाता है।"
"ठीक है, बड़े कार्यक्रमों में अक्सर तथाकथित 'सर्विस थ्रेड्स' होते हैं जिनका काम प्रोग्राम के अन्य हिस्सों की सेवा करना है। अपने दम पर, वे आवश्यक नहीं हैं। उदाहरण के लिए: अप्रयुक्त वस्तुओं (कचरा संग्रह), मेमोरी डंप और त्रुटि को हटाना लॉगिंग, वर्तमान कार्यक्रम की स्थिति पर विभिन्न रिपोर्ट, और इसी तरह आगे।"
"इन सर्विस थ्रेड्स की जरूरत तब होती है जब प्रोग्राम चल रहा होता है, लेकिन इनकी जरूरत खुद नहीं होती है।"
"हां मैं समझता हूं।"
"जावा आपको एक थ्रेड को डेमन के रूप में चलाने देता है। ऐसे थ्रेड्स दूसरों की तरह ही कार्य करते हैं, लेकिन यदि किसी प्रोग्राम में सभी गैर-डेमन थ्रेड्स समाप्त हो गए हैं और केवल डेमन थ्रेड्स बचे हैं, तो JVM प्रोग्राम को बंद कर देगा।"
"तो एक 'सेवा' थ्रेड घोषित करने का मतलब है कि प्रोग्राम समाप्त होने पर इसे नहीं माना जाता है। क्या यह सब है?"
"उह्ह्ह... ठीक है, आपने निश्चित रूप से छोटी और प्यारी बात कही है। अनिवार्य रूप से, मैं आपको यही बताना चाहता था।"
"संक्षिप्तता एक प्रतिभा है। और प्रतिभाशाली रोबोट हर चीज में प्रतिभाशाली हैं।"
"कोई प्रश्न?"
"आप एक थ्रेड को डेमन के रूप में कैसे शुरू करते हैं? कुछ डेमन थ्रेड क्लास से इनहेरिट करें?"
"नहीं, यह उससे कहीं ज्यादा आसान है। थ्रेड क्लास में एक सेटडेमन (बूलियन) विधि है। आपको बस सच में पास होना है और यह है। असली थ्रेड से पहले आपको स्टार्ट() विधि को कॉल करने से पहले इसे कॉल करने की आवश्यकता है। बनाया गया। चलने के बाद आप थ्रेड के प्रकार को नहीं बदल सकते।"
Thread thread = new LoggerThread();
thread.setDaemon(true);
thread.start();
"और बस?"
"हाँ।"
"मैं एक बार फिर से थ्रेड बनाने और शुरू करने की प्रक्रिया पर आपका ध्यान आकर्षित करना चाहता हूं।"
"थ्रेड ऑब्जेक्ट बनाना थ्रेड नहीं बनाता है। थ्रेड ऑब्जेक्ट थ्रेड नहीं है। JVM थ्रेड बनाता है जब start() विधि कहा जाता है। थ्रेड एक विशेष JVM ऑब्जेक्ट है जो आपको थ्रेड के बारे में जानकारी एक्सेस करने देता है और देता है आप इस पर थोड़ा नियंत्रण रखें।"
"मैं समझ गया। धन्यवाद, ऐली।"
GO TO FULL VERSION