簡體   English   中英

Java Multithreading:如何使用Runnable接口創建線程?

[英]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實例的應用程序必須提供將在該線程中運行的代碼。 有兩種方法可以做到這一點:

  1. 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(); } } 
  2. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM