關於多執行緒的start()和run()方法
阿新 • • 發佈:2019-02-16
剛剛接觸多執行緒,對多執行緒還感覺很陌生,按照以前的寫法都習慣了直接呼叫方法,如
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迴圈內容是交替執行的,這就說明了執行緒建立並且啟動了!而不僅僅再是剛才的單執行緒執行了!