Java中Thread.start()和Thread.run()的區別。
眾所周知,start()和run()是多執行緒的兩個重要方法,一個用於建立新執行緒,另一個用於啟動該執行緒的執行。
以下是Thread.start()和Thread.run()之間的一些重要區別。
| 序號 | 關鍵點 | start() | run() |
|---|---|---|---|
| 1 | 實現 | 執行緒類的start()方法的實現是:當它被呼叫時,會建立一個新執行緒,並在該新執行緒中執行run()方法內的程式碼。 | 而如果直接執行run()方法,則不會建立新執行緒,run()方法內的程式碼將在當前執行緒中執行,不會發生多執行緒。 |
| 2 | 定義 | start()方法定義在Thread類中,其包為java.lang。 | run()方法是Runnable介面的方法,也定義在java.lang包中。 |
| 3 | 呼叫 | start()方法不能在同一個物件上呼叫多次,否則會丟擲java.lang.IllegalThreadStateException異常。 | 另一方面,run()方法如果被多次呼叫不會丟擲任何型別的異常。因此,run()方法可以多次呼叫。 |
| 4 | 執行緒數量 | 如前所述,呼叫start()方法時,除了當前執行緒外還會建立一個新執行緒,因此至少存在兩個執行緒,從而引入了多執行緒。 | 另一方面,直接呼叫run()方法不會建立新執行緒,任務將在相同的當前執行緒上執行,因此只有一個執行緒,不會引入多執行緒。 |
| 5 | 呼叫方式 | 由於Thread類實現了Runnable介面,因此它也實現了run()方法,start()方法在建立新執行緒後內部呼叫run()方法。 | 另一方面,如果我們實現Runnable介面並呼叫run()方法,則run()方法由start()方法執行或直接呼叫。 |
Thread.start() vs Thread.run() 示例
JavaTester.java
public class JavaTester extends Thread{
public void run(){
System.out.println("Thread is running...");
}
public static void main(String args[]){
JavaTester t1=new JavaTester();
// this will call run() method
t1.start();
}
}輸出
Thread is running...
示例
JavaTester.java
public class JavaTester implements Runnable{
public void run(){
System.out.println("Thread is running...");
}
public static void main(String args[]){
JavaTester m1=new JavaTester();
Thread t1 =new Thread(m1);
// this will call run() method
t1.start();
}
}輸出
Thread is running...
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP