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á)到寫線程的目的。