2012-11-05 90 views
-1

做一些線程研究,我很困惑在Java線程中的start()方法實際上做了什麼。Java線程 - 開始()

我目前的理解是,start方法不會立即啓動線程的執行,而是將其移動到線程池中等待線程調度程序執行。

這是正確的嗎?我似乎無法找到任何有關方法實際執行的好資源。

回答

3

確切地說,當執行start()的呼叫時,它只是將呼叫安排到run()。無法確定線程何時有效啓動,以及何時有效停止線程。

您可以在Oracle的網站上的Java Doc中找到更多信息。

2

開始

公共無效的start()使該線程開始執行; Java虛擬機會調用此線程的運行方法。結果是 兩個線程同時運行:當前線程(其中 從調用返回到start方法)和另一個線程(其中 執行其運行方法)。

拋出:IllegalThreadStateException - 如果線程已經啓動了 。另請參見:run()的,停止()

Source

0

當你調用Thread.start它使一個特殊的instarcution到JVM啓動一個線程和JVM將採取其生命週期的服務。

+0

第一部分是雙重對話,除非它引用了一些不存在的字節碼指令,其餘部分不正確。 JVM本身不實現線程生命週期:操作系統。 – EJP

1

你是用的線程池

線程是「執行單位」混亂的線程,在一個單獨的線程執行的代碼並行運行與當你調用start()

的線程池的主要方案是建立一個機制在線程之上,它允許您創建線程的,這些線程將小心執行您提交給ThreadPool隊列的任務。

1

start立即啓動新線程,但由於線程的本質,不能保證該線程中的任何代碼行何時會實際執行。在這種情況下使用術語「線程池」是不合適的,因爲池的概念涉及在用戶請求的任務之間重複使用的資源。一個Thread實例被硬連線到run方法的單個調用,之後該線程死亡。

線程調度器是本機OS級組件,不受JVM的直接控制。