您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Java中Thread.start()和Thread.run()之間的區別有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Java中的start()方法
線程類的start()方法可以用來啟動線程;該方法會在內部調用Runnable接口的run()方法,以在單獨的線程中執行run()方法中指定的代碼。
start()方法啟動線程執行以下任務:
● 它統計了一個新線程
● 線程從New State移動到Runnable狀態。
● 當線程有機會執行時,它的目標run()方法將運行。
Java中的run()方法
線程類的run()方法是Runnable接口的一個抽象方法,由java虛擬機直接調用的,不會創建的新線程。
start()方法和run()方法的區別
1、方法的定義
start()方法在java.lang.Thread類中定義;而,run()方法在java.lang.Runnable接口中定義,必須在實現類中重寫。
2、新線程創建
當程序調用start()方法時,會創建一個新線程,然后執行run()方法。但是如果我們直接調用run()方法,則不會創建新的線程,run()方法將作為當前調用線程本身的常規方法調用執行,并且不會發生多線程。
示例:
class MyThread extends Thread { public void run() { System.out.println("\n"); System.out.println("當前線程的名稱: " + Thread.currentThread().getName()); System.out.println("run()方法調用"); } } class demo { public static void main(String[] args) { MyThread t = new MyThread(); t.start(); } }
輸出:
正如我們在上面的例子中所看到的,當我們調用線程類實例的start()方法時,會創建一個新的線程,默認名稱為Thread-0,然后調用run()方法,并在其中執行所有內容。新創建的線程。
現在,讓我們嘗試直接調用run()方法而不是start()方法:
class MyThread extends Thread { public void run() { System.out.println("\n"); System.out.println("當前線程的名稱: " + Thread.currentThread().getName()); System.out.println("run()方法調用"); } } class GeeksforGeeks { public static void main(String[] args) { MyThread t = new MyThread(); t.run(); } }
輸出:
正如我們在上面的例子中所看到的,當我們調用MyThread類的run()方法時,沒有創建新線程,并且在當前線程即主線程上執行run()方法。因此,沒有發生多線程。run()方法是作為正常函數被調用。
3、多次調用
start()方法不能多次調用,否則拋出java.lang.IllegalStateException;而,run()方法可以進行多次調用,因為它只是一種正常的方法調用。
關于Java中Thread.start()和Thread.run()之間的區別有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。