先看段**:
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...