溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java中Thread.start()和Thread.run()之間的區(qū)別有哪些

發(fā)布時間:2020-09-09 10:05:18 來源:億速云 閱讀:253 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關(guān)Java中Thread.start()和Thread.run()之間的區(qū)別有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

Java中的start()方法

線程類的start()方法可以用來啟動線程;該方法會在內(nèi)部調(diào)用Runnable接口的run()方法,以在單獨的線程中執(zhí)行run()方法中指定的代碼。

start()方法啟動線程執(zhí)行以下任務(wù):

●   它統(tǒng)計了一個新線程

●   線程從New State移動到Runnable狀態(tài)。

●   當(dāng)線程有機會執(zhí)行時,它的目標(biāo)run()方法將運行。

Java中的run()方法

線程類的run()方法是Runnable接口的一個抽象方法,由java虛擬機直接調(diào)用的,不會創(chuàng)建的新線程。

start()方法和run()方法的區(qū)別

1、方法的定義

start()方法在java.lang.Thread類中定義;而,run()方法在java.lang.Runnable接口中定義,必須在實現(xiàn)類中重寫。

2、新線程創(chuàng)建

當(dāng)程序調(diào)用start()方法時,會創(chuàng)建一個新線程,然后執(zhí)行run()方法。但是如果我們直接調(diào)用run()方法,則不會創(chuàng)建新的線程,run()方法將作為當(dāng)前調(diào)用線程本身的常規(guī)方法調(diào)用執(zhí)行,并且不會發(fā)生多線程。

示例:

class MyThread extends Thread { 
    public void run() 
    { 
System.out.println("\n"); 
        System.out.println("當(dāng)前線程的名稱: "
                           + Thread.currentThread().getName()); 
        System.out.println("run()方法調(diào)用"); 
    } 
} 
  
class demo { 
    public static void main(String[] args) 
    { 
        MyThread t = new MyThread(); 
        t.start(); 
    } 
}

輸出:

Java中Thread.start()和Thread.run()之間的區(qū)別有哪些

正如我們在上面的例子中所看到的,當(dāng)我們調(diào)用線程類實例的start()方法時,會創(chuàng)建一個新的線程,默認名稱為Thread-0,然后調(diào)用run()方法,并在其中執(zhí)行所有內(nèi)容。新創(chuàng)建的線程。

現(xiàn)在,讓我們嘗試直接調(diào)用run()方法而不是start()方法:

class MyThread extends Thread { 
    public void run() 
    { 
System.out.println("\n"); 
        System.out.println("當(dāng)前線程的名稱: "
                           + Thread.currentThread().getName()); 
  
        System.out.println("run()方法調(diào)用"); 
    } 
} 
  
class GeeksforGeeks { 
    public static void main(String[] args) 
    { 
        MyThread t = new MyThread(); 
        t.run(); 
    } 
}

輸出:

Java中Thread.start()和Thread.run()之間的區(qū)別有哪些

正如我們在上面的例子中所看到的,當(dāng)我們調(diào)用MyThread類的run()方法時,沒有創(chuàng)建新線程,并且在當(dāng)前線程即主線程上執(zhí)行run()方法。因此,沒有發(fā)生多線程。run()方法是作為正常函數(shù)被調(diào)用。

3、多次調(diào)用

start()方法不能多次調(diào)用,否則拋出java.lang.IllegalStateException;而,run()方法可以進行多次調(diào)用,因為它只是一種正常的方法調(diào)用。

關(guān)于Java中Thread.start()和Thread.run()之間的區(qū)別有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI