public呼叫run方法出現的結果class
threadtest
public
static
void
main(string args)
};system.out.println("這裡是main方法 : " +
thread.currentthread().getname());
t.run();
// t.start();}}
呼叫start方法出現的結果
接下來我們來看下呼叫start這個方法為什麼會不一樣
點選進入start這個方法
進入到具體的目錄:/jdk8u/jdk8u/jdk/file/b860bcc84d51/src/share/native/j**a/lang
這裡看的是jdk8的
進入thread.c這個檔案
來到jvm檔案:/jdk8u/jdk8u/hotspot/file/8c0fa90986a6/src/share/vm/prims/jvm.cpp
搜尋jvm_startthread
然後再去深入看下thread_entry這裡做了什麼
1、呼叫start方法的時候是會去建立乙個新的子執行緒,但是最後還是呼叫了run方法;即呼叫start()--->start0()-->jvm_startthread-->thread_entry-->run()
2、呼叫run方法的時候還在主線程呼叫,即t.run();-->thread這個類中的重寫的run方法
start方法最後還是呼叫了run方法,所以兩者除了執行步驟不一樣,其他都差不多
thread中start和run方法的區別
認識thread的start和run 1 start 用 start方法來啟動執行緒,真正實現了多執行緒執行,這時無需等待run方法體 執行完畢而直接繼續執行下面的 通過呼叫thread類的 start 方法來啟動乙個執行緒,這時此執行緒處於就緒 可執行 狀態,並沒有執行,一旦得到cpu時間片,就開...
Thread中start和run方法的區別
呼叫start 方法會建立乙個新的子執行緒並啟動 呼叫run 方法只是thread的乙個普通方法呼叫 public class threadtest public static void main string args system.out.println 當前主線程是 thread.curren...
Thread中run和start方法的模板設計模式
建立乙個thread需要繼承thread重寫run方法或者實現runnable介面中的run方法,其實兩者都是一樣因為thread也繼承了runnable介面。實現了run方法,但是啟動確實用start方法,那麼這是為什麼?thread使用模板設計模式,執行緒控制的邏輯交給thread自己,而實現的...