天天看點

Java中start和run方法的差別

一.問題引入         說到這兩個方法就不得不說多線程,說到多線程就不得不提實作多線程的兩種方式繼承Thread類和實作Runable接口,下面先看這兩種方式的差別。 二. Java中實作多線程的兩種方式 繼承Thread類
      2.  實作Runable接口
不管采用哪種方式,覆寫run方法時既可以用内部類也可以用外部類,不過一般采用内部類。       3.  兩種方式的比較 實際中往往采用實作Runable接口,一方面因為java隻支援單繼承,繼承了Thread類就無法再繼續繼承其它類,而且Runable接口隻有一個run方法;另一方面通過結果可以看出實作Runable接口才是真正的多線程…… 三.兩種方法的差別        1) start: 用start方法來啟動線程,真正實作了多線程運作,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼。通過調用Thread類的start()方法來啟動一個線程,這時此線程處于就緒(可運作)狀态,并沒有運作,一旦得到cpu時間片,就開始執行run()方法,這裡方法 run()稱為線程體,它包含了要執行的這個線程的内容,Run方法運作結束,此線程随即終止。        2) run: run()方法隻是類的一個普通方法而已,如果直接調用Run方法,程式中依然隻有主線程這一個線程,其程式執行路徑還是隻有一條,還是要順序執行,還是要等待run方法體執行完畢後才可繼續執行下面的代碼,這樣就沒有達到寫線程的目的。總結:調用start方法方可啟動線程,而run方法隻是thread的一個普通方法調用,還是在主線程裡執行。這兩個方法應該都比較熟悉,把需要并行處理的代碼放在run()方法中,start()方法啟動線程将自動調用 run()方法,這是由jvm的記憶體機制規定的。并且run()方法必須是public通路權限,傳回值類型為void.。