2011-11-07 121 views
0

讓我們看看下面的代碼,它的工作原理正好。Java中的一個簡單Thread線程場景,其中Runnable接口不需要由Thread實現類實現

final class DemoThread 
{ 
    public void temp() 
    { 
     new Thread(new Runnable() 
     { 
      public void run() 
      { 
       System.out.println("Isn't it great ?") ; 
      } 
     }) .start() ; 
    } 
} 

final public class Main 
{ 
    public static void main(String[] args) 
    { 
     new DemoThread().temp(); 
    } 
} 

它工作正常並顯示消息不是很好嗎?在控制檯上。這裏唯一的問題是,爲什麼Runnable接口不需要由類DemoThread實現?

回答

5

Runnable正在由anonymous inner classtemp方法中實現:

new Thread(new Runnable() 
{ 
    public void run() 
    { 
     System.out.println("Isn't it great ?") ; 
    } 
}) .start() ; 

鑑於的DemoThread一個實例不是在通入Thread構造,不管是否它實現Runnable是完全正交到線程如何運行。

你的代碼是一個類似於此:

final class DemoThread 
{ 
    public void temp() 
    { 
     new Thread(new Anonymous()).start(); 
    } 

    private class Anonymous implements Runnable 
    { 
     public void run() 
     { 
      System.out.println("Isn't it great ?") ; 
     } 
    } 
} 

這是否讓你更清晰?

3

DemoThread實際上並沒有對Thread本身做任何事情。它產生了一個新的Thread,它圍繞着一個實現Runnable的匿名類。

​​

創建一個新類。運行javac時,您會在文件系統中看到它。

2

必須實現Runnable接口的是您作爲參數傳遞給Thread對象的對象,這是將要執行的對象。

就你而言,你已經聲明瞭一個實現了Runnable的匿名類,它是傳遞給Thread對象的類。

new Thread(new Runnable() // <--- This is the class that's implementing Runnable 
     { 
      public void run() 
      { 
       System.out.println("Isn't it great ?") ; 
      } 
     }) .start() ; 
相關問題