1. 程式人生 > 其它 >java Thread中,run方法和start方法的區別

java Thread中,run方法和start方法的區別

先說結論:
(1)通過呼叫Thread類中的start()方法可以啟動一個執行緒,但是執行緒並不是立刻執行,而是處於就緒態,一旦獲取cpu時間片,則會立即執行run()方法
(2)start()方法實現了多執行緒執行,而run()方法只是一個普通方法呼叫

原始碼分析:
`public synchronized void start() {

    if (threadStatus != 0)  //判斷執行緒是否是就緒狀態,如果不是則會丟擲異常
        throw new IllegalThreadStateException();

    group.add(this);  //通知執行緒組這個執行緒即將啟動,把該執行緒加入執行緒組中

    boolean started = false;  //設定started標記
    try {
        start0();  //通過JVM呼叫start0()方法啟動執行緒
        started = true;  //修改started標記
    } finally {
        try {
            if (!started) {  //如果started標記沒有被修改,則執行緒啟動失敗
                group.threadStartFailed(this);
            }
        } catch (Throwable ignore) {

        }
    }
}`

public void run() { if (target != null) { //target是一個Runnable物件,通過target.run()可以直接調到你寫的run方法 target.run(); } }