首頁> Java> Java入門> 主體

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

王林
發布: 2021-05-01 12:04:04
轉載
3138 人瀏覽過

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
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!