2014-03-19 31 views
0

存在兩種方法來確定線程是否已完成。首先,您可以在線索上致電isAlive()。此方法由Thread定義,其一般形式如下:如果在調用它的線程仍在運行isalive vs加入JAVA主題

final boolean isAlive() 

isAlive()方法返回true。否則返回false。雖然isAlive()偶爾是有用的,您將更常用於等待線程完成的方法稱爲join()

isAlive() vs join()。優點?

回答

1

雖然的IsAlive()是偶爾有用,但你會更多 通常使用等待線程完成的方法被調用join()方法

我不明白。爲什麼按照你的說法,join()isAlive()更常用?你有證據嗎?

他們是Thread類定義了兩種不同的方法:

isAlive()

測試線程是否還活着。如果線程 已啓動並且尚未終止,則線程仍處於活動狀態。

join()

等待該線程死亡。

一個方法執行檢查,另一個方法等待線程死亡。

當您想執行線程生命檢查而不等待時,您將使用isAlive(),它將返回一個關於線程狀態的布爾值。如果你想等待線程死亡,你將使用join()。其含義是你想等待完成分配給該線程的任務。

+1

從評論中,我瞭解到isAlive()和join()是沒有關係的,應根據需要使用。 – Upen

+0

@Upen是的,他們沒有關係。 –

0

如果你想阻塞直到線程完成,然後使用join()。否則 - 你決定。

如果你的邏輯不阻止等待線程,那麼我認爲更清晰的代碼看起來將用isAlive()來實現。看看你的代碼,看看更好看。

+0

雙重否定發現。 – UmNyobe

+0

@UmNyobe,好點,謝謝 – akostadinov

0

如果調用它的線程仍在運行,則isAlive()方法返回true。

這是不完全正確 - public final boolean isAlive()

測試線程是否還活着。線程還活着如果它已經啓動並且還沒有死亡。

這意味着,你可以從isAlive得到false如果線程尚未開始而「加入」將等待其返回前開始完成。

+0

另外,如果線程在isAlive())調用以'true'返回時死亡,會發生什麼? –