2013-06-25 56 views
13

這是一個關於Java線程詞彙的非常基本的問題。Java線程何時處於活動狀態?

我看不到任何可能的重複,但可能會有。

這個詞是什麼alive參考Oracles文檔?

是否當run()方法還沒有完成,或者它是任何其他參數?

+11

答案就在那裏:「*如果一個線程已經啓動並且還沒有死,*線程就是活着的*」。這個鏈接也可以幫助你:http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/states.html – Maroun

+1

謝謝你的圖。這真的很有幫助。 –

回答

23

根據的Javadoc你mentionned:如果已經開始,還沒有死

線程是活的。

線程「開始」時被調用其start()方法和「管芯」在其run()方法結束時,或者當stop()(廢棄)被調用。所以是的,線程在其run()方法仍在進行中時是「活着的」,但是在調用start()和由JVM暗示調用run()方法之間的時間窗口中,線程也「活着」。

您還可以查看@Marou Maroun建議的Thread.getState()interesting information about Thread States

我也跟着他的建議警告你,如果拋出的異常被傳播超過run以外,線程可以提前終止。在這種情況下線程不會活着。

編輯:正如@zakkak所建議的,即使run()方法尚未啓動,該線程仍可以被視爲存在。如果您想對其何時被調用進行適當控制,請使用ScheduledExecutorService,特別是schedule()方法,該方法可爲您提供更精確的執行計劃。

+0

我注意到你添加了它,我刪除了我的評論。你也應該注意到可能拋出異常並殺死線程。 – Maroun

+1

我更新了我的答案,以包含您的鏈接和您的評論。它現在是你的一半:) – Matthieu

+4

這都是你的:)好的解釋答案。 – Maroun

1

當調用start方法時,線程處於活動狀態,並且在線程死亡之前。即使它處於等待狀態,它仍然活着,它可以在等待狀態轉移到等待狀態之前停止。

從活着到死了,它可以從runnable狀態移動到waiting狀態。

2

線程處於新建/運行/等待狀態時處於活動狀態。從本質上講,run方法可以運行或不運行

+0

'你必須'啓動()'線程爲了它是活着的: 'MyThread t = new MyThread(); t.isAlive();'返回'false' – Matthieu

0

從創建Thread對象的那一刻起,線程就被認爲是活着的,並啓動它直到它完成run方法或死亡。即使它處於空閒,跑步或睡眠狀態,它仍會處於活動狀態。

0

線程「活着」表示線程仍在運行。

是的,你可以說run()方法正在爲Alive線程執行。

此外,isAlive()方法用於知道線程是否仍在運行。

final boolean isAlive() 

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

+0

當線程處於等待狀態時,會返回什麼狀態? – divine

0

線程處於新狀態或處於運行/等待狀態時處於活動狀態。並且我們還可以知道線程已死亡,它在內存中仍處於活動狀態。

1

在start()返回後直到run()返回到JVM,線程仍然活着。

相關問題