1. 程式人生 > >線程中start()和run()的區別

線程中start()和run()的區別

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()的區別