और समय समाप्ति पास और धागा वापस नहीं आया राज्य क्या है?
उस बिंदु पर धागे की स्थिति अनिश्चित है। सबसे अच्छा आप कह सकते हैं कि यह नया नहीं होगा, और संभवतया समाप्त नहीं किया जाएगा। (लेकिन फिर भी बाद के मामले में, यह समाप्त राज्य में टाइमआउट निकाल दिया हो रही है और बुला कोड टाइमआउट अपवाद पकड़ा होने के बीच चले गए हैं सकता है।)
इस कोड के बारे में:
if (thread.isAlive()) {
thread.interrupt();
thread = null;
}
करने की गारंटी है कि अगर थ्रेड अभी भी जिंदा है तो बाधा उत्पन्न करें। (एक छोटा सा मौका है कि आप टर्मिनेटेड राज्य में एक थ्रेड को बाधित करने का प्रयास करेंगे, लेकिन interrupt()
के लिए जावाडोक की मेरी पढ़ाई यह है कि यह हानिरहित है।)
अंतराल के साथ क्या होता है पूरी तरह से धागे तक होता है। विशेष रूप से, इस बात की कोई गारंटी नहीं है कि धागा या तो बाधा दिखाई देगा, या अपेक्षित चीज करेगा; यानी खत्म करो। (ए अच्छी तरह से व्यवहार धागा बाधित ध्वज नियमित रूप से जांच होनी चाहिए, और wait(...)
, sleep(...)
पर "बाधित" अपवाद छुटकारा पाने नहीं करना चाहिए, आदि)
null
thread
करने का काम कम प्रभाव पड़ेगा। अगर धागा अभी भी चल रहा है, तो यह/उसके संसाधन कचरा नहीं होगा वैसे भी। अगर धागा समाप्त हो जाता है, तो यह कचरा संग्रह के लिए योग्य Thread
ऑब्जेक्ट प्रस्तुत कर सकता है। लेकिन इससे ज्यादा अंतर नहीं आएगा। जब एक धागा टर्मिनेटेड राज्य में जाता है, तो इसका ढेर स्वचालित रूप से मुक्त हो जाता है, इसे अपने थ्रेड समूह से निकाल दिया जाता है, और इसके लिंक को Runnable
पर हटा दिया जाता है। एक बार ऐसा करने के बाद, थ्रेड ऑब्जेक्ट में स्मृति की न्यूनतम मात्रा होती है: भंडारण रिसाव के परिप्रेक्ष्य से संबंधित कुछ भी नहीं होना चाहिए।
स्रोत
2011-04-14 02:17:31
देखें कि आप Thread.interrupt साथ धागा (बाधित करने के लिए योजना बना रहे हैं) आप लूप के प्रवेश बिंदु में Thread.interrupted() की जांच करनी चाहिए। –
उदाहरण कोड के लिए धन्यवाद। मैं ठीक वही कर रहा था और धागे के राज्यों को परिभाषित कर रहा था, और यदि यह समय समाप्त हो गया तो मैं धागे को रद्द कर देता हूं। एक बार जब मैं एसएनएस मंच पर जाता हूं तो मैं मेमोरी/थ्रेड लीक –