Java中 r.run() 方法和 t.start() 方法的區別
阿新 • • 發佈:2019-01-24
程式:
結果:public class Main { public static void main(String[] args) { Runner r = new Runner(); Thread t = new Thread(r); System.out.println(Thread.currentThread()); r.run(); // 這兩個方法有什麼區別? t.start(); // 這兩個方法有什麼區別? } } class Runner implements Runnable { @Override public void run() { System.out.println(Thread.currentThread() + " Run() begin!"); } }
Thread[main,5,main]
Thread[main,5,main] Run() begin!
Thread[Thread-0,5,main] Run() begin!
run() 就是運行了
start() 就是開始了
首先,之所以出現執行緒,就是為了更好的利用CPU,讓她更加“精明”的幹活。通過呼叫Thread類的start()方法來啟動一個執行緒,這時此執行緒是處於就緒狀態,並沒有執行。然後通過此Thread類呼叫方法run()來完成其執行操作的,這裡方法run()稱為執行緒體,它包含了要執行的這個執行緒的內容,Run方法執行結束,此執行緒終止,而CPU再執行其它執行緒,而如果直接用Run方法,這只是呼叫一個方法而已,程式中依然只有主執行緒--這一個執行緒,其程式執行路徑還是隻有一條,這樣就沒有達到寫執行緒的目的。
記住:執行緒就是為了更好地利用CPU,提高程式執行速率的!
public class Main { public static void main(String[] args) { Runner1 r = new Runner1(); r.run();// 這是方法呼叫,而不是開啟一個執行緒 Thread t = new Thread(r);// 呼叫了Thread(Runnable target)方法。且父類物件變數指向子類物件。 t.start(); for (int i = 0; i < 100; i++) { System.out.println("進入Main Thread執行狀態"); System.out.println(i); } } } class Runner1 implements Runnable { // 實現了這個介面,jdk就知道這個類是一個執行緒 public void run() { for (int i = 0; i < 100; i++) { System.out.println("進入Runner1執行狀態"); System.out.println(i); } } }