您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(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(); } }
輸出:
正如我們在上面的例子中所看到的,當(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(); } }
輸出:
正如我們在上面的例子中所看到的,當(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é)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(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)容。