2013-11-04 70 views
-1

我不理解下面的程序。 Runnable是一個接口和構造函數不會在任何接口存在。在這個程序中,new Runnable(){...}如何工作?這個java程序是如何工作的?

public class Threads { 
    public static void main (String[] args) { 
     new Thread(new Runnable() { 
      public void run() { 
       System.out.print("bar"); 
     }}).start();  
    } 
} 
+4

您需要閱讀[匿名類](http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html) – MadProgrammer

+0

檢查http://stackoverflow.com/questions/4105640 /匿名類擴展線程中的Java – upog

回答

1

它創建匿名類在這裏的一個實例:

new Runnable() { 

,而不是Runnable接口

0

下面的代碼通過覆蓋運行實例通過Runnable接口實現線程匿名內部類()方法。您可以參考this鏈接詳細瞭解內部類的內容。

new Thread(new Runnable() { 
public void run() { 
System.out.print("bar"); 
}}).start(); 
1

new Thread()需要一個Runnable類。所以你正在使用anonymous inner class來實現這一點。下面是做同樣的事情的更詳細的方法:

public class Threads { 
    public static void main (String[] args) { 
     MyRunnable runnable = new MyRunnable(); 
     Thread thread = new Thread(runnable); 
     thread.start(); 
    } 
} 

class MyRunnable implements Runnable { 
    public void run() { 
     System.out.print("bar"); 
    } 
} 
1

首先,這是什麼程序做的是從文本打印到控制檯的主要方法中實例化一個新的線程。

現在,Thread類構造函數接受一個實現Runnable接口的類。我們可以通過兩種方式爲Thread構造函數提供一個實例。我們可以使用實現Runnable的具體類或提供匿名內部類。在這種情況下,你正在做的更晚。

根據關於匿名內部類的Oracle文檔。匿名類使您能夠使代碼更加簡潔。它們使您能夠同時聲明和實例化一個類。除了沒有名字之外,它們就像本地的課程。如果您只需要使用一次本地課程,請使用它們。

new Thread(new Runnable() { 
    public void run() { 
     System.out.print("bar"); 
    } 
}).start(); 

所以,你可以認爲這傳遞類滿足通過重寫run方法和構造函數的參數中定義它的合同Runnable接口的。