2011-05-06 21 views
9

एक धागा पर पहुंचने पर स्थिति समाप्त हो गई है? run() विधि के अंत तक पहुंचने पर इसे समाप्त कर दिया जाता है?कैसे जांचें कि धागा समाप्त हो गया है या नहीं?

तो धागा समाप्त होने पर जांचने का सही तरीका क्या है? क्योंकि निम्नलिखित स्थिति हमेशा मेरे लिए सच होती है

if(!(thread.getState()).equals("TERMINATED")){} 

कोई विचार?

उत्तर

18

पहले खत्म:, Thread.getState() एक Thread.State है, जो एक String के बराबर होना कभी नहीं होगा रिटर्न ताकि आप नहीं करनी होंगी इस तरह है कि कोड लिखने:

if(thread.getState()!=Thread.State.TERMINATED){ } 

और हाँ: जब run() विधि समाप्त होता है (या तो सामान्य रूप से या क्योंकि यह एक अपवाद फेंकता है), तो एक ThreadTERMINATED राज्य पर जायेगा।

+1

धन्यवाद, @Art, फिक्स के लिए। –

+5

'और हाँ: जब रन() विधि समाप्त होती है (या तो सामान्य रूप से या क्योंकि यह अपवाद फेंकता है), तो एक थ्रेड टर्मिनेटेड स्थिति पर जायेगा। 'यह वास्तव में सच नहीं है, अपवाद जैसे अप/असामान्य निष्पादन इसे' UncaughtExceptionHandler 'और यह जो कुछ भी पसंद करता है वह करने के लिए स्वतंत्र है। ('थ्रेड.currentThread() रन() ') जैसे सामान सहित, थ्रेड टर्मिनल स्थिति में है बाहर निकलने के बाद() विधि जो थ्रेड ग्रुप सिंक पर अवरुद्ध (असीमित) हो सकती है। – bestsss

+1

@bestsss: और वहां मुझे उम्मीद थी कि कोई भी उस छोटे से छेड़छाड़ को नहीं देखेगा ;-) हाँ, आप बिल्कुल सही हैं। –

12

परीक्षा पद्धति thread.isAlive()

... या वैकल्पिक रूप से, में शामिल होने के लिए जब तक इसके साथ thread.join()

+1

स्पष्ट रूप से .isAlive() में कुछ समय समस्याएं हैं: http://stackoverflow.com/questions/3140731/isalive-method-of-java-thread-is-not-working-properly – Simon

+0

@ सिमॉन मुझे लगता है कि निष्कर्ष निकाले गए भ्रामक हैं। ऐसा लगता है कि धागा राज्य मुख्य धागे से असीमित रूप से सेट किया गया है, इसलिए थ्रेड शुरू करने के तुरंत बाद इसका परीक्षण करने की उम्मीद नहीं की जा सकती है। वास्तव में, मैं उम्मीद करता हूं कि 'getState()' का उपयोग करने का नतीजा कोई अलग नहीं होगा। – orodbhen

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