[英]Java Multithreading : how does thread creation with Runnable interface work?
有人可以解釋這段代碼的作用嗎? new Thread(new X()).start();
其余代碼:
class X implements Runnable {
X() {}
}
public static void main(String[] arg) {
new Thread(new X()).start();
}
}
這是一個非常簡單的示例,顯示了如何創建新線程並運行它。 在Java中創建新線程時,需要給它們做些事情-“可運行”。
class X implements Runnable
此接口只有一個方法-run() 。 因此,您將創建一個新線程,其構造函數中具有可運行的線程。
new Thread(new X())
創建新線程后,必須使用start()方法啟動它。 這是當它調用runnable的run()方法時。 在您的示例中,這是在構造線程之后被鏈接起來的:
new Thread(new X()).start();
現在,此示例很不尋常,因為類X實際上沒有實現run方法。 但是通常情況下,還有一些額外的內容,因此您的示例如下所示:
class X implements Runnable {
public void run() {
System.out.println("This is running on a different thread!");
}
public static void main(String[] arg) {
new Thread(new X()).start();
}
}
首先,不需要定義構造函數(如果為空)。 如果您未定義,它將自動為空白。 第二,您可以簡單地做一個匿名類定義,我將在稍后解釋。 在這種情況下,該方法不是主要方法,它可以運行。 您也可以使用匿名類定義來定義線程對象。
new Thread() {
@Override
public void run() {
//Code here
}
}.start();
匿名類定義允許您定義和實例化一個類,它們同時擴展/實現另一個類,而無需實際創建該類。 另外,請注意X.main()是靜態的,這意味着X的任何實例都不會具有該方法。 您要覆蓋運行和調用開始。 Start只是一種在不同線程中調用運行的方法。 請注意,您不能兩次啟動線程。
每個線程對象都有一個方法run()。 如果調用線程對象的start()方法,則它將執行run()。
唯一的區別是它將單獨/並行執行,並且不會在現有的操作順序中執行。
您可以通過兩種方式創建線程:一種是通過擴展Thread
,另一種是通過實現Runnable
接口。
如果您不擴展Thread
類,則您的類對象將不被視為線程對象。 因此,您必須顯式創建Thread類對象。
Thread
類將Runnable
類作為構造函數中的參數。
您正在將實現Runnable
class
X的對象傳遞給Thread
構造函數,以便您的類run
()方法將從Thread的start
()方法執行。
您可以通過兩種不同的方式創建線程。 看看有關線程創建的 oracle文檔
創建Thread實例的應用程序必須提供將在該線程中運行的代碼。 有兩種方法可以做到這一點:
Provide a Runnable object.
Runnable
接口定義了一個方法run,旨在包含在線程中執行的代碼。 The Runnable object is passed to the Thread constructor
public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new Thread(new HelloRunnable())).start(); } }
Subclass Thread
。 Thread類本身實現Runnable
,盡管其run方法不執行任何操作。 應用程序可以繼承Thread
子類,從而提供其自己的run實現
public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); } public static void main(String args[]) { (new HelloThread()).start(); } }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.