2011-11-18 21 views
5

मैं जावा में जानना चाहता हूँ:जावा में अगर एक धागा मारा गया, तो दूसरे धागे के साथ क्या होगा?

  1. तो मुख्य थ्रेड को मार डाला गया जो दूसरे बच्चों धागे का क्या होगा?
  2. अगर बच्चे के थ्रेड को मार दिया गया तो भाई बहनों और पैरेंट थ्रेड के साथ क्या होगा?

मैंने निम्न लिंक में पढ़ा है कि चूंकि पता स्थान साझा करने वाले धागे, एक थ्रेड को मारने से अन्य धागे भी प्रभावित हो सकते हैं।

नीचे here से उद्धरण है।

थ्रेड हल्के वजन प्रक्रियाएं हैं जो नियंत्रण के मुख्य प्रवाह को कई प्रवाहों में विभाजित करती हैं और प्रत्येक प्रवाह नियंत्रण/थ्रेड स्वतंत्र रूप से निष्पादित हो जाएगा। सिस्टम में प्रक्रिया की गतिविधि धागे द्वारा दर्शायी जाती है। प्रक्रिया जिसमें एकाधिक धागे होते हैं उन्हें बहु थ्रेड कहा जाता है। प्रत्येक धागे का अपना धागा आईडी (डेटा प्रकार इंटीजर), रजिस्टर, प्रोग्राम काउंटर, स्टैक, त्रुटि संख्या है। थ्रेड एक ही प्रक्रिया के भीतर साझा स्मृति का उपयोग कर संवाद कर सकते हैं। अनुप्रयोगों के उप-कार्य को व्यवस्थित करने और बनाए रखने के लिए धागे का उपयोग करने के विभिन्न फायदे हैं। जब हम संदर्भ स्विचिंग के लिए कम सिस्टम संसाधनों की तुलना में धागे का उपयोग कर रहे हैं और आवेदन के थ्रूपुट में वृद्धि करते हैं। धागे कार्यक्रम की संरचना को भी सरल बनाते हैं। कार्यों के बीच संचार के लिए कोई विशेष तंत्र नहीं है। थ्रेड के कुछ नुकसान भी हैं उदाहरण के लिए थ्रेड पुन: प्रयोज्य नहीं हैं क्योंकि वे किसी प्रक्रिया पर निर्भर हैं और प्रक्रिया से अलग नहीं किए जा सकते हैं। थ्रेड अलग नहीं हैं क्योंकि उनके पास अपना पता स्थान नहीं है। थ्रेड द्वारा त्रुटि कारण पूरी प्रक्रिया या प्रोग्राम को मार सकता है क्योंकि वह त्रुटि उस प्रक्रिया या प्रोग्राम में उपयोग किए जाने वाले सभी थ्रेडों की संपूर्ण मेमोरी स्पेस को प्रभावित करती है। प्रक्रिया में मौजूद थ्रेड द्वारा साझा संसाधनों के कारण थ्रेड द्वारा संसाधन क्षति होने पर पूरी प्रक्रिया या प्रोग्राम को भी प्रभावित कर सकते हैं। समेकित पढ़ने और मेमोरी थ्रेड तक पहुंच लिखने के लिए सिंक्रनाइज़ेशन की आवश्यकता होगी। प्रक्रिया का डेटा डेटा रेस के माध्यम से थ्रेड द्वारा आसानी से नुकसान पहुंचा सकता है क्योंकि प्रक्रिया में मौजूद सभी थ्रेडों के पास डेटा के समान टुकड़े तक पहुंच होती है।

यू GYS कृपया जो भी ऊपर के लिंक में बताया है कि क्या बता सकते हैं जावा

उत्तर

10

1) कुछ भी नहीं है "बच्चे धागे 'का क्या होगा ...

2) कुछ भी नहीं का क्या होगा के लिए लागू है "भाई धागे" ...

... निम्नलिखित अपवाद के साथ: यदि सभी शेष धागे डिमन थ्रेड हैं, तो आवेदन समाप्त हो जाएगा (यानी, जब केवल डेमॉन थ्रेड छोड़ दिए जाते हैं, तो इन्हें भी मार दिया जाएगा) ।

से

documentation of Thread:

[...] जावा वर्चुअल मशीन निम्न में से या तो जब तक होता धागे निष्पादित करने के लिए जारी है:

  • वर्ग रनटाइम के निकास विधि बुलाया गया है [ ...]
  • सभी धागे जो डेमॉन धागे नहीं हैं, या तो कॉल से रन विधि पर लौटने या रन विधि से परे प्रचार करने वाले अपवाद को फेंक कर मर गए हैं।
+0

त्वरित उत्तर के लिए धन्यवाद। मुझे बिंदु 2 के बारे में एक और संदेह है। मैंने निम्न लिंक में पढ़ा है कि चूंकि पता स्थान साझा करने वाले धागे, एक थ्रेड को मारने से अन्य धागे भी प्रभावित हो सकते हैं। आपकी प्रतिक्रिया के लिए प्रतीक्षारत http://www.blurtit.com/q236205.html – nantitv

+1

ए) "थ्रेड भी प्रोग्राम की संरचना को सरल बनाते हैं" कहने पर रंट पूरी तरह गलत है, और इसके बाद कुछ भी नहीं कहता है कि वह दुखी वाक्य। बी) मुझे नहीं लगता कि यह जावा पर लागू होता है। सी) धागे को स्पष्ट रूप से मत मारो (थ्रेड.स्टॉप का उपयोग करके)। Thread.stop विधि बहुत अच्छे कारणों से बहिष्कृत है। – aioobe

+0

थ्रेड एक कार्यक्रम में एक ही समय में विभिन्न कार्यों को प्रबंधित करने में मदद करता है। Thread.stop() विधि को बहिष्कृत किया गया है क्योंकि असुरक्षित है (इस बारे में सोचें कि थ्रेड कुछ महत्वपूर्ण डेटा प्रबंधित कर रहा है)। रन() विधि में थोड़ी देर में एक बूलियन स्थिति के साथ इसे रोकने के लिए बेहतर है। –

0

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

एक प्रक्रिया केवल एक कंटेनर है जिसमें कुछ धागे होते हैं। धागे कोड निष्पादित करते हैं। यदि एक प्रक्रिया कंटेनर के अंदर एक धागा या अधिक चल रहा है, तो प्रक्रिया मौजूद रहेगी। धागे के बीच कोई symbiotic संबंध नहीं है, एक हत्या एक दूसरे को मार नहीं होगा।

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