Thread的start和run的區別

2022-05-09 05:18:09 字數 696 閱讀 2181

最近看到乙個題目,**如下:

public

static

void

main(string args)

};t.run();

system.out.println("ping");

}static

void

pong()

問,結果會輸出什麼?

我執行了很多次,結果都是pong ping。後來終於發現了關鍵點所在,執行緒物件t,呼叫的不是start()方法,而是run()方法。後來我開斷點模式debug,發現呼叫run()方法,整個程式只有乙個執行緒,而呼叫start()方法之後,程式就會多出乙個執行緒。這時才有和主線程爭cpu,可能出現多種結果的情況,但由於下面輸出方法很快就被執行了,所以基本上都是「ping pong」的輸出。

所以run()和start()的區別就是:

run()是runnable介面中定義的乙個方法,是為了讓客戶程式設計師在這個方法裡寫自己的功能**的。直接呼叫和普通的類呼叫自己的成員方法是沒有任何區別的。

而start()則是執行緒開始執行的標誌,當這個方法被呼叫後,程式中才會多出乙個獨立的執行緒,接著便是執行run()方法。

所以我覺得,自己要寫單獨的執行緒,最好還是繼承thread來做,如果是實現介面的話,到主線程裡,還是要new thread(new yourrunnableclass())來呼叫,感覺很不方便。

Thread的start 和run 區別

首先,之所以出現執行緒,就是為了更好的利用cpu,讓她更加 精明 的幹活。通過呼叫thread類的start 方法來啟動乙個執行緒,這時此執行緒是處於就緒狀態,並沒有執行。然後通過此thread類呼叫方法run 來完成其執行操作的,這裡方法run 稱為執行緒體,它包含了要執行的這個執行緒的內容,ru...

認識Thread的start和run

認識thread的start和run 1 start 用 start方法來啟動執行緒,真正實現了多執行緒執行,color red 這時無需等待run方法體 執行完畢而直接繼續執行下面的 color 通過呼叫thread類的 start 方法來啟動乙個執行緒,color red 這時此執行緒處於就緒 ...

Thread類的start 和run 方法

啟動執行緒肯定要用start 方法。當用start 開始乙個執行緒後,執行緒就進入就緒狀態,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著它可以由jvm排程並執行。這並不意味著執行緒就會立即執行。當cpu分配給它時間時,才開始執行run 方法 如果有的話 start 是方法,它呼叫run 方法....