start() :
它的作用是啟動(dòng)一個(gè)新線程。
通過(guò)start()方法來(lái)啟動(dòng)的新線程,處于就緒(可運(yùn)行)狀態(tài)燎猛,并沒(méi)有運(yùn)行恋捆,一旦得到cpu時(shí)間片,就開(kāi)始執(zhí)行相應(yīng)線程的run()方法重绷,這里方法run()稱為線程體沸停,它包含了要執(zhí)行的這個(gè)線程的內(nèi)容,run方法運(yùn)行結(jié)束昭卓,此線程隨即終止愤钾。start()不能被重復(fù)調(diào)用。用start方法來(lái)啟動(dòng)線程候醒,真正實(shí)現(xiàn)了多線程運(yùn)行能颁,即無(wú)需等待某個(gè)線程的run方法體代碼執(zhí)行完畢就直接繼續(xù)執(zhí)行下面的代碼。這里無(wú)需等待run方法執(zhí)行完畢倒淫,即可繼續(xù)執(zhí)行下面的代碼伙菊,即進(jìn)行了線程切換。
run() :
run()就和普通的成員方法一樣敌土,可以被重復(fù)調(diào)用镜硕。
如果直接調(diào)用run方法,并不會(huì)啟動(dòng)新線程纯赎!程序中依然只有主線程這一個(gè)線程谦疾,其程序執(zhí)行路徑還是只有一條,還是要順序執(zhí)行犬金,還是要等待run方法體執(zhí)行完畢后才可繼續(xù)執(zhí)行下面的代碼念恍,這樣就沒(méi)有達(dá)到多線程的目的。
總結(jié):調(diào)用start方法方可啟動(dòng)線程晚顷,而run方法只是thread的一個(gè)普通方法調(diào)用峰伙,還是在主線程里執(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é)一下:
- start() 可以啟動(dòng)一個(gè)新線程该默,run()不能
- start()不能被重復(fù)調(diào)用瞳氓,run()可以
- start()中的run代碼可以不執(zhí)行完就繼續(xù)執(zhí)行下面的代碼,即進(jìn)行了線程切換栓袖。直接調(diào)用run方法必須等待其代碼全部執(zhí)行完才能繼續(xù)執(zhí)行下面的代碼匣摘。
- start() 實(shí)現(xiàn)了多線程,run()沒(méi)有實(shí)現(xiàn)多線程裹刮。