java中thread的start()和run()的區(qū)別java中thread的start()和run()的區(qū)別:
1.start()方法來啟動(dòng)線程,真正實(shí)現(xiàn)了多線程運(yùn)行,這時(shí)無需等待run方法體代碼執(zhí)行完畢而直接繼續(xù)執(zhí)行下面的代碼:
通過調(diào)用Thread類的start()方法來啟動(dòng)一個(gè)線程,
這時(shí)此線程是處于就緒狀態(tài),
并沒有運(yùn)行。
然后通過此Thread類調(diào)用方法run()來完成其運(yùn)行操作的,
這里方法run()稱為線程體,
它包含了要執(zhí)行的這個(gè)線程的內(nèi)容,
Run方法運(yùn)行結(jié)束,
此線程終止,
而CPU再運(yùn)行其它線程,
2.run()方法當(dāng)作普通方法的方式調(diào)用,程序還是要順序執(zhí)行,還是要等待run方法體執(zhí)行完畢后才可繼續(xù)執(zhí)行下面的代碼:
而如果直接用Run方法,
這只是調(diào)用一個(gè)方法而已,
程序中依然只有主線程--這一個(gè)線程,
其程序執(zhí)行路徑還是只有一條,
這樣就沒有達(dá)到寫線程的目的。
舉例說明一下:
記?。壕€程就是為了更好地利用CPU,
提高程序運(yùn)行速率的!
public class TestThread1{
public static void main(String[] args){
Runner1 r=new Runner1();
//r.run();//這是方法調(diào)用,而不是開啟一個(gè)線程
Thread t=new Thread(r);//調(diào)用了Thread(Runnable target)方法。且父類對(duì)象變量指向子類對(duì)象。
t.start();
for(int i=0;i<100;i++){
System.out.println("進(jìn)入Main Thread運(yùn)行狀態(tài)");
System.out.println(i);
}
}
}
class Runner1 implements Runnable{ //實(shí)現(xiàn)了這個(gè)接口,jdk就知道這個(gè)類是一個(gè)線程
public void run(){
for(int i=0;i<100;i++){
System.out.println("進(jìn)入Runner1運(yùn)行狀態(tài)");
System.out.println(i);
}
}
}