做一些線程研究,我很困惑在Java線程中的start()
方法實際上做了什麼。Java線程 - 開始()
我目前的理解是,start方法不會立即啓動線程的執行,而是將其移動到線程池中等待線程調度程序執行。
這是正確的嗎?我似乎無法找到任何有關方法實際執行的好資源。
做一些線程研究,我很困惑在Java線程中的start()
方法實際上做了什麼。Java線程 - 開始()
我目前的理解是,start方法不會立即啓動線程的執行,而是將其移動到線程池中等待線程調度程序執行。
這是正確的嗎?我似乎無法找到任何有關方法實際執行的好資源。
確切地說,當執行start()
的呼叫時,它只是將呼叫安排到run()
。無法確定線程何時有效啓動,以及何時有效停止線程。
您可以在Oracle的網站上的Java Doc中找到更多信息。
開始
公共無效的start()使該線程開始執行; Java虛擬機會調用此線程的運行方法。結果是 兩個線程同時運行:當前線程(其中 從調用返回到start方法)和另一個線程(其中 執行其運行方法)。
拋出:IllegalThreadStateException - 如果線程已經啓動了 。另請參見:run()的,停止()
當你調用Thread.start
它使一個特殊的instarcution到JVM啓動一個線程和JVM將採取其生命週期的服務。
你是用的線程池
線程是「執行單位」混亂的線程,在一個單獨的線程執行的代碼並行運行與當你調用start()
的線程池的主要方案是建立一個機制在線程之上,它允許您創建線程的組,這些線程將小心執行您提交給ThreadPool隊列的任務。
是的,這是正確的。你不知道這個線程什麼時候會被執行,但是肯定會被執行。 看看下面的圖片。它解釋了一個線程的生命週期:http://cs.fit.edu/~ryan/java/language/thread.gif
start
立即啓動新線程,但由於線程的本質,不能保證該線程中的任何代碼行何時會實際執行。在這種情況下使用術語「線程池」是不合適的,因爲池的概念涉及在用戶請求的任務之間重複使用的資源。一個Thread
實例被硬連線到run
方法的單個調用,之後該線程死亡。
線程調度器是本機OS級組件,不受JVM的直接控制。
第一部分是雙重對話,除非它引用了一些不存在的字節碼指令,其餘部分不正確。 JVM本身不實現線程生命週期:操作系統。 – EJP