多線程中run()和start()方法的區別

通常,系統通過調用線程類中的start()方法來啓動一個線程,此時該線程處於就緒狀態,而不是運行狀態,這意味着這個線程可以被JVM來調度執行。在調度過程中,JVM通過調用線程類的run()方法來完成實際的操作,當run()方法結束時,此線程就會終止。

如果直接調用線程類的run()方法,這就是普通的函數調用。此時,程序中仍只有主線程一個線程,而採用start()來調用,則不止一個線程,不僅有主線程,只有我們自己要執行的線程。即,start()方法能夠異步的調用run()方法,但是直接調用run()方法卻是同步的,無法達到多線層的目的。

class Test implements Runnable{

	@Override
	public void run() { 
		// TODO Auto-generated method stub
	    System.out.println("run中開始");
	    try {
			TimeUnit.SECONDS.sleep(1);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	    System.out.println("run中結束");
	}
	
}
public class TestRunAndStart {

	static void testStart(){     
		System.out.println("testStart開始");
		Thread thread=new Thread(new Test());
		thread.start();
		System.out.println("testStart結束");
	}
	
	static void testRun(){
		System.out.println("testRun開始");
		Runnable thread=new Test();
		thread.run();
		System.out.println("testRun結束");
	}
	
	public static void main(String[] args){
		testRun();
		System.out.println();
		testStart();
	}
}
testRun開始
run中開始
run中結束
testRun結束

testStart開始
testStart結束
run中開始
run中結束


發佈了24 篇原創文章 · 獲贊 21 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章