首頁  >  文章  >  Java  >  java執行緒中start方法與run方法的差別是什麼

java執行緒中start方法與run方法的差別是什麼

王林
王林轉載
2021-05-01 12:04:043295瀏覽

java執行緒中start方法與run方法的差別是什麼

區別對比如下:

我們知道Java中的執行緒是透過Java.lang.Thread來實現的,那麼我們就可以透過實例化Thread一個物件來建立一個線程,然後再呼叫start()啟動,但是Thread的一個特定的方法run()也可以啟動線程,那麼這兩個方法有什麼差別呢?

執行緒狀態

在Java当中,线程通常有五种状态:创建、运行、阻塞、等待、终止
NEW------------------->新建状态,没有调用start()之前的状态
RUNNABLE---------->运行状态,(running执行中,ready就绪(等待cpu时间片))
BLOCKED------------>阻塞状态,
WAITING-------------->等待状态,没有明确的等待结束时间,调用wait()
TIMED_WAITING—>超时等待状态,有明确的等待时间,如:sleep(xxx)
TERMINATED-------->终止状态

多執行緒原理:

我們一般使用thread new一個執行緒,然後呼叫start方法啟動,執行緒就會處於運行狀態中ready,等待CPU調度,然後再執行線程裡面的run()方法,使用start方法才真正實現了多線程運行,因為這個時候不用等待我們的run方法執行完成就可以繼續執行下面的程式碼,這才叫多執行緒。

如果直接使用thread執行run方法會怎麼樣呢?

因為run方法是thread裡面的一個普通的方法,如果直接呼叫run()方法,這個時候它會運行在主線程中的,因為程式中只有主線程一個線程,如果有兩個線程,都是直接呼叫run()方法,那麼他們的執行順序一定是按順序執行的,並沒有實現多線程的目的。

免費學習影片分享:java影片教學

程式碼比較

public class ThreadDemo5 {
    public static final boolean flag=false;
    public static void main(String[] args) {
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });
        t1.start();
    }
}

呼叫start()方法,執行緒名稱是預設的

java執行緒中start方法與run方法的差別是什麼

public class ThreadDemo5 {
    public static final boolean flag=false;
    public static void main(String[] args) {
        Thread t1=new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName());
            }
        });
        t1.run();
    }
}

呼叫run(),執行緒名稱是main

java執行緒中start方法與run方法的差別是什麼

#相關推薦:java入門教學

以上是java執行緒中start方法與run方法的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除