2010-09-28 11 views
9

समाप्त करते हैं तो जावा थ्रेड हटा दिए जाते हैं, कहें कि मैं नीचे दी गई विधि का उपयोग करके प्रत्येक दो सेकंड में एक थ्रेड फेंकता हूं और प्रत्येक थ्रेड को पूरा होने में लगभग एक सेकंड लगता है। क्या समाप्त धागे हटा दिए जाते हैं?जब वे

new Thread (new myRunnableClass()).start(); 
+2

यदि प्रक्रिया आपके उदाहरण के जितनी सरल है, और प्रत्येक धागा अगले शुरू होने से पहले समाप्त होने की गारंटी है, तो क्या आप केवल एक थ्रेड का उपयोग कर सकते हैं? मैं अनुमान लगा रहा हूं कि आपका वास्तविक कार्यक्रम उससे अधिक जटिल है, लेकिन मैं वहां सुझाव को फेंक रहा हूं। –

+0

@musicfreak: आप जानते हैं, आपने अभी एक बहुत ही भयानक बिंदु लाया है। किसी कारण से मैं अन्य स्थानों पर ऐसा कर रहा हूं और मुझे लगता है कि इस स्थिति में एक अलग दिखता है लेकिन मुझे इस तकनीक को मेरी समस्या पर लागू करने का एक तरीका पता चला। धन्यवाद! – Dave

उत्तर

6

देशी, ओएस-स्तरीय धागा जैसे ही थ्रेड समाप्त होता है (लगभग run() खत्म होता है), लेकिन थ्रेड ऑब्जेक्ट किसी अन्य ऑब्जेक्ट की तरह रहता है, जब तक यह पहुंच योग्य नहीं हो जाता है और कचरा कलेक्टर चलने जैसा लगता है।

संपादित करें: यह भी जानना Thread ( सूर्य की ओरेकल के कार्यान्वयन, anywho में) एक निजी विधि वीएम से कहा जाता है कि दिलचस्प हो सकता है जब धागा बाहर निकलता है, जो आक्रामक तरीके से एक चर्चा करते हुए सहित कई क्षेत्रों, nulls पर Thread(Runnable) कन्स्ट्रक्टर द्वारा सेट किया गया। इसलिए यदि आप Thread के संदर्भ को बरकरार रखते हैं, तो निष्पादन को समाप्त करने के बाद जिन चीज़ों की आवश्यकता नहीं है, उन्हें जारी किया जाएगा।

5

मैं इसे हटा नहीं दूंगा। एक बार धागा पूरा हो जाने पर, यह मृत राज्य में जायेगा जो जेवीएम द्वारा एकत्रित कचरा बनने के लिए तैयार हो रहा है।

+3

... जब तक कि कुछ अन्य "लाइव" डेटा संरचना थ्रेड ऑब्जेक्ट के संदर्भ को बनाए रखती है। ओपी में पेश किए गए उदाहरण के साथ यह कोई समस्या नहीं होगी। – Pointy

+1

... लेकिन यह तब होता है जब आप 'रननेबल' से कुछ परिणाम पुनर्प्राप्त करने के लिए, थ्रेड में शामिल हों (कहें '), लेकिन फिर से, आप अपने उदाहरण में ' Runnable' संदर्भ खो गया है। – jbindel

2

एक नया धागा फैलाना एक बहुत महंगा प्रक्रिया है। आप क्या चाहते हैं एक थ्रेड पूल है। इसके बारे में जाने के विभिन्न तरीके हैं - here's one

+3

स्पॉन्गिंग थ्रेड * * लंबे समय पहले * निक्स सिस्टम (* अर्थात् लिनक्स *) में महंगा था, लेकिन कर्नेल 2.4 (* या यह 2.6 था? *) में उन्होंने अपनी थ्रेडिंग सिस्टम बदल दी ताकि नए धागे को अब व्यावहारिक रूप से मुक्त किया जा सके। ध्यान दें कि विंडोज वातावरण में थ्रेड्स हमेशा बढ़ते रहे हैं। उस ने कहा, थ्रेड पूल का उपयोग करना एक स्मार्ट चीज है, क्योंकि स्वाभाविक रूप से हमेशा कुछ ओवरहेड होता है और लगभग एक दर्जन होने पर आपको शायद ही कभी अरबों चलने वाले धागे की आवश्यकता होती है। – Esko

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