1. 程式人生 > >java多執行緒run()和start()的區別

java多執行緒run()和start()的區別

其實,run()和start()區別很簡單。

當你啟動執行緒,使用start(),系統會把run()方法當成執行緒執行體來處理,這是正常的,也是正確的情況。但是,當你啟動執行緒時,呼叫run()方法,系統run()方法會立即執行,但是這時候系統會把run()方法當成普通的方法,執行緒物件也當成一個普通物件。

不理解我上面說的話?那我就在解釋一下。

第一個問題,為什麼要有多執行緒。這個問題的答案可以搜尋到很多。我這邊給出我理解的,不怎麼官方的答案:建立一個執行緒,就是為了在原有主執行緒的基礎上,建立一個新的任務,以達到想要的效果。

既然如此,如果我們呼叫run()方法,系統會把run()方法當成普通的方法,就不能達到建立一個新的任務的目的。

第二個問題,執行緒如何建立。最常見的有兩種,繼承Thread類和實現Runnable介面。當然還有像 實現Callable介面 的方式建立執行緒。這些方法,都類似的要把run()方法重寫,把run()方法包裝成執行緒執行體。(實現Callable介面 的方法,要把call()包裝成執行緒執行體)。可見run()只是執行緒類的一個方法。

既然如此,如果要啟動一個執行緒,當然要呼叫strat(),如果呼叫run(),則是呼叫執行緒類的一個run()方法,這在系統看來,不過是呼叫一個很普通的類(執行緒類)中的一個普通的方法(run()方法),會一視同仁的在主執行緒上面執行。