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


每個線程都有要執行的任務。線程的任務處理邏輯可以在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()會被立即執行

輸出結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM