線程中start()和run()的區別
阿新 • • 發佈:2018-05-24
AS code auth 輸出 作用 run pan and inf
每個線程都有要執行的任務。線程的任務處理邏輯可以在Tread類的run實例方法中直接實現或通過該方法進行調用,因此
run()相當於線程的任務處理邏輯的入口方法,它由Java虛擬機在運行相應線程時直接調用,而不是由應用代碼進行調用。
而start()的作用是啟動相應的線程。啟動一個線程實際是請求Java虛擬機運行相應的線程,而這個線程何時能夠運行是由線程調度器決定的。start()調用結束並不表示相應線程已經開始運行,這個線程可能稍後運行,也可能永遠也不會運行。
下面看一個例子:
1 /** 2 * run()相當於線程的任務處理邏輯的入口方法 3 * start()的作用是啟動相應的線程4 * @author yiRain 5 * 6 */ 7 public class startAndRun { 8 public static void main(String[] args) { 9 Thread t = new Thread(){ 10 public void run(){ 11 world(); 12 } 13 }; 14 15 t.start(); 16 //t.run(); 17 System.out.print(" Hello ");18 } 19 20 static void world(){ 21 System.out.print(" world "); 22 } 23 24 }
輸出結果:
相應的調用t.run(),只是調用一個實例的方法而已,並未啟動線程,因此run()會被立即執行
輸出結果:
線程中start()和run()的區別