1. 程式人生 > >Java中 r.run() 方法和 t.start() 方法的區別

Java中 r.run() 方法和 t.start() 方法的區別

程式:

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);
		}
	}
}