start方法怎麼呼叫的run方法的

2021-09-27 21:33:24 字數 601 閱讀 8629

start方法裡面有乙個關鍵的方法,start0(),這是乙個native方法。這個方法原始碼我們是看不到的,但是看文件得知,jvm是通過這個方法呼叫run方法的。

也就是這裡其實最少有兩步,第一步是使用了乙個執行緒     第二步這個執行緒呼叫了run方法。

public synchronized void start()  finally 

} catch (throwable ignore)

}}

new thread(t).run();  如果是這樣coding,直接用執行緒呼叫run方法,這個沒有使用到建立的執行緒,因為沒有經過start0();

本來想著是子類繼承父類,這個執行的是thread類的run方法。但是仔細一看,

public void run()

}父類執行的確實是父類的run,但是run裡面確執行的是runnable介面的抽象方法run。這是多型,其實執行的還是實現類的run。因此new thread直接呼叫run,執行的是資源類的run方法。只是並沒有執行緒而已

那如果資源類直接呼叫run呢?

資源類繼承thread又重新run方法,因此走的是子類的run,不走thread的run

start方法run方法區別

兩種方法的區別 1.start方法 用 start方法來啟動執行緒,是真正實現了多執行緒,通過呼叫thread類的start 方法來啟動乙個執行緒,這時此執行緒處於就緒 可執行 狀態,並沒有執行,一旦得到cpu時間片,就開始執行run 方法。但要注意的是,此時無需等待run 方法執行完畢,即可繼續執...

關於執行緒的start呼叫run順序

1 start 用start方法來啟動執行緒,真正實現了多執行緒執行,這時無需等待run方法體 執行完畢而直接繼續執行下面的 通過呼叫thread類的start 方法來啟動乙個執行緒,這時此執行緒處於就緒 可執行 狀態,並沒有執行,一旦得到cpu時間片,就開始執行run 方法,這裡方法 run 稱為...

run 方法與start 方法的區別

thread類中的run 方法是thread類實現介面runnable介面重寫run 方法,並且為執行緒中的普通方法。如果主線程中呼叫run 方法時,其後面的 需要等待run 方法中的 體執行完畢時,才能夠繼續完成。start 方法為thread類中的方法,當執行緒呼叫start 方法時,jvm虛擬...