有人可以解釋這段代碼做了什麼嗎? new Thread(new X()).start();
Java多線程:如何使用Runnable接口創建線程?
休息代碼:
class X implements Runnable {
X() {}
}
public static void main(String[] arg) {
new Thread(new X()).start();
}
}
有人可以解釋這段代碼做了什麼嗎? new Thread(new X()).start();
Java多線程:如何使用Runnable接口創建線程?
休息代碼:
class X implements Runnable {
X() {}
}
public static void main(String[] arg) {
new Thread(new X()).start();
}
}
這是一個非常簡單的例子,它展示瞭如何創建一個新的線程並運行它。當你用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();
}
}
你並不需要定義構造函數,如果是空白的,首先。如果你沒有定義一個,它會自動變爲空白。其次,你可以簡單地做一個匿名類的定義,我將在第二個解釋。在這種情況下,該方法不是主要的,它運行。您也可以使用匿名類定義來定義一個線程對象。
new Thread() {
@Override
public void run() {
//Code here
}
}.start();
匿名類的定義允許您定義和實例,從而無論是在不實際創建類的同時擴展/實現其他類的類。另外,請注意X.main()是靜態的,這意味着X的任何實例都不會有該方法。你想覆蓋運行和調用開始。開始只是一個調用在另一個線程中運行的方法。請注意,您無法啓動兩次線程。
http://stackoverflow.com/questions/541487/implements-runnable-vs-extends-thread –
每個線程對象都有一個run()方法。如果你調用線程對象的start()方法,那麼它將執行run()。
唯一的區別是它將被分開/並行執行並且不會在現有的操作順序中。
您可以通過兩種方式創建線程:一個通過擴展Thread
和其他通過實現Runnable
接口。
如果您沒有擴展Thread
類,那麼您的類對象將不會被視爲線程對象。所以你必須顯式地創建Thread類對象。
Thread
class將在構造函數中將Runnable
作爲參數。
你是通過你的class
X實現Runnable
到Thread
構造函數,以便您的類run
()方法將start
()線程的方法來執行的對象。
您可以通過兩種不同的方式創建線程。看看有關的oracle文檔thread creation
創建Thread實例的應用程序必須提供將在該線程中運行的代碼。有兩種方法可以做到這一點:
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();
}
}
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();
}
}
產生一個新的線程,其中X的一個實例運行。如果您不知道線程是什麼,我建議您首先閱讀流程的基礎知識,而不是語言特定的實現。 –
這不會編譯:錯誤的大括號和X不執行運行方法。 – Puce