線程中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 }

輸出結果:

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

相應的調用t.run(),只是調用一個實例的方法而已,並未啓動線程,因此run()會被立即執行

輸出結果:

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章