java-線(xiàn)程中start和run的區(qū)別

start() :

它的作用是啟動(dòng)一個(gè)新線(xiàn)程。
通過(guò)start()方法來(lái)啟動(dòng)的新線(xiàn)程,處于就緒(可運(yùn)行)狀態(tài),并沒(méi)有運(yùn)行,一旦得到cpu時(shí)間片,就開(kāi)始執(zhí)行相應(yīng)線(xiàn)程的run()方法,這里方法run()稱(chēng)為線(xiàn)程體,它包含了要執(zhí)行的這個(gè)線(xiàn)程的內(nèi)容,run方法運(yùn)行結(jié)束,此線(xiàn)程隨即終止。start()不能被重復(fù)調(diào)用。用start方法來(lái)啟動(dòng)線(xiàn)程,真正實(shí)現(xiàn)了多線(xiàn)程運(yùn)行,即無(wú)需等待某個(gè)線(xiàn)程的run方法體代碼執(zhí)行完畢就直接繼續(xù)執(zhí)行下面的代碼。這里無(wú)需等待run方法執(zhí)行完畢,即可繼續(xù)執(zhí)行下面的代碼,即進(jìn)行了線(xiàn)程切換。

run() :

run()就和普通的成員方法一樣,可以被重復(fù)調(diào)用。
如果直接調(diào)用run方法,并不會(huì)啟動(dòng)新線(xiàn)程!程序中依然只有主線(xiàn)程這一個(gè)線(xiàn)程,其程序執(zhí)行路徑還是只有一條,還是要順序執(zhí)行,還是要等待run方法體執(zhí)行完畢后才可繼續(xù)執(zhí)行下面的代碼,這樣就沒(méi)有達(dá)到多線(xiàn)程的目的。
總結(jié):調(diào)用start方法方可啟動(dòng)線(xiàn)程,而run方法只是thread的一個(gè)普通方法調(diào)用,還是在主線(xiàn)程里執(zhí)行。

public class Test {
    static void pong(){
        System.out.print("pong");
    }
    public static void main(String[] args) {
        Thread t=new Thread(){
            public void run(){
                pong();
            }
        };
        t.run();
        System.out.print("ping");       
    }
}
運(yùn)行結(jié)果:
pongping

總結(jié)一下:

  1. start() 可以啟動(dòng)一個(gè)新線(xiàn)程,run()不能
  2. start()不能被重復(fù)調(diào)用,run()可以
  3. start()中的run代碼可以不執(zhí)行完就繼續(xù)執(zhí)行下面的代碼,即進(jìn)行了線(xiàn)程切換。直接調(diào)用run方法必須等待其代碼全部執(zhí)行完才能繼續(xù)執(zhí)行下面的代碼。
  4. start() 實(shí)現(xiàn)了多線(xiàn)程,run()沒(méi)有實(shí)現(xiàn)多線(xiàn)程。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容