2011-05-06 127 views
9

何時線程到達終止狀態?當達到run()方法的末尾時它會終止嗎?如何檢查線程是否終止?

那麼檢查線程是否終止的正確方法是什麼?因爲以下條件似乎對我而言總是如此

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

任何想法?

回答

18

首先完成:Thread.getState()返回Thread.State,這將永遠等於String,所以你需要編寫這樣的代碼:

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

和是:當run()方法結束(正常或因爲它拋出異常),那麼Thread將轉到TERMINATED狀態。

+1

謝謝,@Art,修復。 – 2011-05-06 12:41:13

+5

'是的:當run()方法結束時(正常或因爲它引發異常),那麼線程將進入TERMINATED狀態。「事實上並非如此,w /異常執行異常,它調用'UncaughtExceptionHandler '它可以隨心所欲地做任何事情。 (包括諸如'Thread.currentThread()。run()')之類的東西,線程處於terminate狀態在exit()方法之後,它可以阻止(無限地)在ThreadGroup同步。 – bestsss 2011-05-06 13:23:54

+1

@bestsss:那裏我希望沒有人注意到這個小漏洞;-)是的,你當然是對的。 – 2011-05-06 13:30:35

12

測試方法thread.isAlive()

...或者任選,加入直到它與thread.join()

+1

顯然.isAlive()有一些計時問題:http://stackoverflow.com/questions/3140731/isalive-method-of-java-thread-is-not-working-properly – Simon 2015-04-02 09:14:53

+0

@simon我認爲得出的結論有誤導。看起來很清楚,線程狀態是與主線程異步設置的,因此在啓動線程之後立即對其進行測試是不可行的。事實上,我期望使用'getState()'的結果不會有任何不同。 – orodbhen 2017-07-26 11:16:21