區別對比如下:
我們知道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()方法,執行緒名稱是預設的
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入門教學
以上是java執行緒中start方法與run方法的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!