1. 程式人生 > 其它 >java多執行緒中run和start區別

java多執行緒中run和start區別

技術標籤:多執行緒java多執行緒併發程式設計thread

目錄

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());
    }
}

在這裡插入圖片描述

4.參考資料

java多執行緒中run和start區別