關於Thread類中run 方法的一些見解

2021-08-10 01:45:06 字數 1123 閱讀 6362

先看段**:

public

class threaddemo}})

}}.start();

}}

結果如下:

thread:thread-0

thread:thread-0

thread:thread-0

thread:thread-0

thread:thread-0

...

再看段**:

public

class threaddemo}})

}.start();

}}

結果如下:

thread子類run()方法在執行
最後再看段**:

public

class threaddemo}})

.start();

}}

結果如下:

runnable:thread-0

runnable:thread-0

runnable:thread-0

runnable:thread-0

runnable:thread-0

...

總結:第一段、第二段**中,執行緒new的是thread類的子類,子類覆蓋了父類的run()方法,那麼程式會執行該子類中的run()方法,並不會執行傳入該子類引數中的runnable物件中的run()方法。若是沒有覆蓋,會去找父類(即thread類)中的run方法,檢視原始碼thread類中run()方法如下,

@override

public

void

run()

}

target是runnable物件,如果target不為空,那麼就會執行runnable中的run方法。第三段**中傳入了runnable物件,所以程式會執行該runnable物件的run方法,程式中new runnable()中的run()方法實現了runnable介面中的run()方法,最終是runnable物件執行自己的run()方法,所以執行結果為:runnable:thread-0…

Thread類的start 和run 方法

啟動執行緒肯定要用start 方法。當用start 開始乙個執行緒後,執行緒就進入就緒狀態,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由jvm排程並執行。這並不意味著執行緒就會立即執行。當cpu分配給它時間時,才開始執行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...