Java多線程start()和run()方法的區(qū)別

start()

start() 函數(shù) API 定義:

使該線程開始執(zhí)行,Java 虛擬機(jī)調(diào)用該線程的 run 方法。結(jié)果是兩個線程并發(fā)地運(yùn)行;當(dāng)前線程(從調(diào)用返回給 start 方法)和另一個線程(執(zhí)行其 run 方法)。多次啟動一個線程是非法的。特別是當(dāng)線程已經(jīng)結(jié)束執(zhí)行后,不能再重新啟動。

start() 函數(shù)啟動線程執(zhí)行以下任務(wù):

  • 它統(tǒng)計(jì)了一個新線程
  • 線程從 New State 移動到 Runnable 狀態(tài)。
  • 當(dāng)線程有機(jī)會執(zhí)行時,它的目標(biāo) run() 方法將運(yùn)行。
  • start() 方法不能多次重復(fù)調(diào)用,否則拋出 java.lang.IllegalStateException 異常;

小結(jié):

start() 函數(shù)用來啟動線程,真正實(shí)現(xiàn)了多線程運(yùn)行。這時無需等待 run 方法體代碼執(zhí)行完畢,可以直接繼續(xù)執(zhí)行下面的代碼;通過調(diào)用 Thread 類的 start() 方法來啟動一個線程, 這時此線程是處于就緒狀態(tài), 并沒有運(yùn)行。 然后通過此 Thread 類調(diào)用方法 run() 來完成其運(yùn)行操作的, 這里方法 run() 稱為線程體,它包含了要執(zhí)行的這個線程的內(nèi)容。 Run 方法運(yùn)行結(jié)束, 此線程終止。然后 CPU 再調(diào)度其它線程。

run()

run() 函數(shù) API 定義:

如果該線程是使用獨(dú)立的 Runnable 運(yùn)行對象構(gòu)造的,則調(diào)用該 Runnable 對象的 run 方法;否則,該方法不執(zhí)行任何操作并返回。Thread 的子類應(yīng)該重寫該方法。

run() 函數(shù)啟動:

線程類的 run() 方法是 Runnable 接口的一個抽象函數(shù),由 java 虛擬機(jī)直接調(diào)用的,不會創(chuàng)建的新線程。所以可以被多次調(diào)用,因?yàn)樗皇且粋€抽象函數(shù)。

小結(jié):

run() 函數(shù)只是類的一個普通函數(shù)而已,如果直接調(diào)用 run 方法,程序中依然只有主線程這一個線程,其程序執(zhí)行路徑還是只有一條,還是要順序執(zhí)行,還是要等待 run 方法體執(zhí)行完畢后才可繼續(xù)執(zhí)行下面的代碼,這樣就沒有達(dá)到寫線程的目的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容