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