2016-01-22 137 views
0

有人可以解釋這段代碼做了什麼嗎? new Thread(new X()).start();Java多線程:如何使用Runnable接口創建線程?

休息代碼:

class X implements Runnable { 
    X() {} 
    } 
    public static void main(String[] arg) { 
     new Thread(new X()).start(); 
    } 
} 
+0

產生一個新的線程,其中X的一個實例運行。如果您不知道線程是什麼,我建議您首先閱讀流程的基礎知識,而不是語言特定的實現。 –

+3

這不會編譯:錯誤的大括號和X不執行運行方法。 – Puce

回答

6

這是一個非常簡單的例子,它展示瞭如何創建一個新的線程並運行它。當你用Java創建新的線程時,你可以給他們做一些事情 - 一個「Runnable」。

class X implements Runnable 

此接口只有一個方法 - run()的。所以你創建了一個新的線程,在其構造函數中有一個可運行的線程。

new Thread(new X()) 

一旦你創建了一個新的線程,你必須與的start()方法啓動它。這是當它調用runnable的run()方法。在你的榜樣,這個剛剛被線程建成後鏈上:現在

new Thread(new X()).start(); 

,這個例子是在X類實際上並沒有實現運行方法不同尋常。但通常情況下,還有額外的位,所以你的例子是這樣的:

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(); 
    } 
} 
0

你並不需要定義構造函數,如果是空白的,首先。如果你沒有定義一個,它會自動變爲空白。其次,你可以簡單地做一個匿名類的定義,我將在第二個解釋。在這種情況下,該方法不是主要的,它運行。您也可以使用匿名類定義來定義一個線程對象。

new Thread() { 
    @Override 
    public void run() { 
     //Code here 
    } 
}.start(); 

匿名類的定義允許您定義和實例,從而無論是在不實際創建類的同時擴展/實現其他類的類。另外,請注意X.main()是靜態的,這意味着X的任何實例都不會有該方法。你想覆蓋運行和調用開始。開始只是一個調用在另一個線程中運行的方法。請注意,您無法啓動兩次線程。

+0

http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread –

0

每個線程對象都有一個run()方法。如果你調用線程對象的start()方法,那麼它將執行run()。

唯一的區別是它將被分開/並行執行並且不會在現有的操作順序中。

0

您可以通過兩種方式創建線程:一個通過擴展Thread和其他通過實現Runnable接口。

如果您沒有擴展Thread類,那麼您的類對象將不會被視爲線程對象。所以你必須顯式地創建Thread類對象。

Thread class將在構造函數中將Runnable作爲參數。

你是通過你的class X實現RunnableThread構造函數,以便您的類run()方法將start()線程的方法來執行的對象。

您可以通過兩種不同的方式創建線程。看看有關的oracle文檔thread creation

創建Thread實例的應用程序必須提供將在該線程中運行的代碼。有兩種方法可以做到這一點:

  1. Provide a Runnable object.Runnable接口定義了一個方法,運行,意味着包含線程執行的代碼。 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,提供它自己的實現運行

    public class HelloThread extends Thread { 
    
        public void run() { 
         System.out.println("Hello from a thread!"); 
        } 
    
        public static void main(String args[]) { 
         (new HelloThread()).start(); 
        } 
    
    } 
    
相關問題