2009-05-18 16 views
5

मैं JVM बाहर निकलने पर एक डेमॉन धागा के रूप में एक धागा पर चिह्नित करने के प्रभाव से पूरी तरह वाकिफ है (यदि सभी गैर डेमॉन धागे से बाहर निकलें, JVM बाहर निकल जाएगा।)डेमॉन थ्रेड होने का क्या अर्थ है?

एक धागा स्थापित करने के लिए वहाँ अन्य दुष्प्रभाव हैं एक डेमॉन के रूप में?

(पूरी तरह से, जो कि अर्थशास्त्र को छोड़कर वास्तव में अप्रासंगिक है, इस मामले में पीछे की तरफ डेमॉन थ्रेड का अर्थ नहीं है: डेमॉन थ्रेड को JVM को जीवित नहीं रखना चाहिए ... उदाहरण के लिए, यदि मैंने लिखा मेरा अपना HTTP डिमन और इसे चलाना शुरू कर दिया, क्या मैं नहीं चाहता कि जब तक कि धागा जीवित न हो, तब तक JVM जीवित रहेगा? या 'डेमन' शब्द के लिए कुछ और अर्थपूर्ण है?)

+2

आमतौर पर आपके पास डेमॉन थ्रेड और गैर-डिमन थ्रेड एक ही समय में चल रहे होते हैं: गैर-डिमन थ्रेड उपयोगी काम कर रहे हैं लेकिन डिमन थ्रेड बस बैठने के लिए प्रतीक्षा कर रहे हैं। उपयोगी काम करने के बाद, कार्यक्रम से बाहर निकलना चाहिए; आप नहीं चाहते हैं कि यह धागे से हो जो कुछ भी नहीं कर रहे हैं। आपके उदाहरण में, HTTP डिमन एक डेमन * प्रक्रिया * है, न कि डेमन थ्रेड। कोई एक डेस्कटॉप कंप्यूटर की कल्पना कर सकता है जो कोई गैर-डिमन प्रक्रिया चलने पर बंद हो जाता है, और आप नहीं चाहते कि कोई सर्वर इसे चालू रखे। (या शायद आप ... जो भी हो, यह सबसे अच्छा नाम नहीं है।) –

+0

हाँ - मैं पूरी तरह से व्यवहार को समझता हूं, और इसे नियमित रूप से शोषण करता हूं। मेरा पूरी तरह से यादृच्छिक तरफ सिर्फ यह देखने के लिए एक सवाल था कि क्या दूसरे नाम के भ्रमित-नस्ल पर सहमत हैं :) – Jared

+1

यह वास्तव में भ्रमित नहीं है, एक डिमन से बाहर निकलने की उम्मीद नहीं है - प्रोग्राम चलने पर हमेशा चलने के लिए, क्योंकि वे वास्तव में बाहर निकलें, उन्हें प्रोग्राम को बाहर निकलने से रोकना नहीं चाहिए। –

उत्तर

4

जैसा कि आपके पास है, इसका मतलब है कि थ्रेड अलग हो गया है और जब तक आप JVM चलाते हैं तब तक चलेंगे, जब तक कि आप इसे स्पष्ट रूप से बंद न करें। Spec द्वारा, JVM तब तक चल रहा है जब तक कि गैर -डेमन थ्रेड चल रहा है।

इसके अलावा, इसका मतलब कुछ भी नहीं है।

आप तर्क दे सकता है कि इस पीछे की ओर है - सब के बाद, बंद (8) डेमॉन प्रक्रियाओं को मारता है - लेकिन JVM एक अच्छी तरह से व्यवहार प्रक्रिया अन्यथा, लोगों को समाप्त करने का यह उम्मीद में सक्षम होना चाहिए, जिसका मतलब है की तरह काम करना चाहिए मारने के बिना। तो यह कल्पना एक सामान्य निर्णय है कि अधिक सामान्य उपयोग के मामले के आधार पर एक डिज़ाइन निर्णय है।

3

एक डेमॉन थ्रेड अन्य धागे की सेवा है। जेवीएम के लिए यह केवल एक डिमन है जो बाहरी दुनिया के लिए नहीं है। इस प्रकार यदि केवल दासताएं बढ़ती हैं तो उनका कोई और उपयोग नहीं होता है। यदि आप एक http डिमन चाहते हैं तो आप सामान्य थ्रेड के साथ एक httpserver लिखते हैं और इसे अपने ओएस के टूलसेट का उपयोग करके डिमन के रूप में ऐमो चलाने के लिए डिमन के रूप में आमंत्रित करते हैं।

जेवीएम में एक डेमॉन थ्रेड को जोड़ने के लिए ओएस के लिए एक डेमॉन थ्रेड नहीं है। डेमन्स आमतौर पर अनंत लूप होते हैं और आप नहीं चाहते हैं कि आपका जेवीएम असीम रूप से चल रहा हो, जबकि आप जो कुछ भी चल रहे हैं वह कुछ डिमॉन हैं जो इनपुट की प्रतीक्षा करते हैं (जो नहीं दिया जाता है)।

संबंधित मुद्दे