1. 程式人生 > >關於多執行緒的start()和run()方法

關於多執行緒的start()和run()方法

           剛剛接觸多執行緒,對多執行緒還感覺很陌生,按照以前的寫法都習慣了直接呼叫方法,如
class Demo extends Thread    //建立執行緒的第一種方法,直接繼承Thread類
{
	public void run(){
		for(int x=0;x<60;x++){
			
		
		System.out.println("demo run");
	}
}
}
public class ThreadDemo01 {
public static void main(String[] args){
	Demo s=new Demo();  //建立一個物件就是建立一個執行緒
	s.run();
	for(int x=0;x<60;x++){
		System.out.println("hello");
	}
}

}

在這裡雖然你可以看到可以正常執行,但是當你多執行幾次你就會發現你所執行的結果每次都是一樣的,但是正常的執行緒執行結果難道真的是這樣嗎?那麼我們可以把s.run();修改成s.start();,再次執行則可以發現每次執行結果都不一樣,這又是為什麼呢?只要弄明白了這個就知道了run()和start()方法的區別了。

我們不妨先來看看Thread類中run()方法的作用,在Thread中run()方法是用來儲存執行緒所要執行的程式碼,s.run();命令僅僅是簡單的方法的呼叫,執行緒建立,但是並沒有啟動,執行以上程式你可以發現會先執行run()方法體內的程式碼,等執行完才繼續執行main中的程式碼,仍然是單執行緒執行,並不是我們所期待的多執行緒併發執行,那麼我們修改成s.start()以後執行,會發現run()方法內的內容和main方法體內的for迴圈內容是交替執行的,這就說明了執行緒建立並且啟動了!而不僅僅再是剛才的單執行緒執行了!