java多執行緒中run和start區別
阿新 • • 發佈:2020-12-15
目錄
java多執行緒中run和start區別
run只是Thread裡面的一個普通方法,start是啟動執行緒的方法。
start()方法讓一個執行緒進入就緒佇列等待分配 cpu, 分到 cpu 後才呼叫實現的run()方法。
start()方法不能重複呼叫, 如果重複呼叫會丟擲異常。
而 run 方法是業務邏輯實現的地方, 本質上和任意一個類的任意一個成員方法並沒有任何區別, 可以重複執行, 也可以被單獨呼叫。
1.start()方法
start()方法來啟動執行緒,無需等待run方法體程式碼執行完畢,可以直接繼續執行下面的程式碼;
jvm通過呼叫Thread類的start()方法來啟動一個執行緒, 這時此執行緒是處於就緒狀態, 並沒有執行。
然後通過此Thread類呼叫方法run()來完成其執行操作的, 這裡方法run()稱為執行緒體,它包含了要執行的這個執行緒的內容, run方法執行結束, 此執行緒終止。
然後其他執行緒再搶cpu的控制權接著執行,這是真正實現了多執行緒。
2.run()方法
run()方法當作普通方法的方式呼叫。程式還是要順序執行,要等待run方法體執行完畢後,才可繼續執行下面的程式碼; 程式中只有主執行緒——這一個執行緒,其程式執行路徑還是隻有一條。這並非多執行緒,還只是單執行緒。
3.程式範例
public class MyThread1 extends Thread {
@Override
public void run() {
try {
System.out.println("run threadName="+ this.currentThread().getName()+"begin");
Thread.sleep(2000);
System.out.println("run threadName="+ this.currentThread().getName()+"end");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public class Run1 {
public static void main(String[] args) {
final MyThread1 myThread1 = new MyThread1();
System.out.println("begin="+System.currentTimeMillis());
myThread1.run();
System.out.println("end="+System.currentTimeMillis());
}
}
public class Run2 {
public static void main(String[] args) {
final MyThread1 myThread2 = new MyThread1();
System.out.println("begin="+System.currentTimeMillis());
myThread2.start();
System.out.println("end="+System.currentTimeMillis());
}
}