2011-07-09 83 views
3

我是java的新手。有一個疑問。Java:線程調用Runnable

我讀到,在內部,Thread類的run()方法調用Runnable接口的run()

我的問題是,

Thread類的run()方法如何調用Runnable接口的run()

在此先感謝。

回答

5

Runnable接口只包含一個方法:run()方法。 Thread類實際上是 實現了Runnable接口。

因此,當你從Thread類繼承時,你的子類也實現了Runnable接口。

下面是一個例子,這一切是如何發生的:

import java.applet.Applet; 
    public class OurApplet extends Applet { 
      public void init() { 
        Runnable ot = new OurClass(); 
        Thread th = new Thread(ot); 
        th.start(); 
         } 
       } 

新線程對象的start()方法被調用來開始控制的新線程的執行。

我們需要將可運行對象傳遞給線程對象的構造函數的原因是線程必須有一些方法可以訪問我們希望線程執行的run()方法。由於我們不再覆蓋Thread類的run()方法,執行Thread類的默認run()方法, 這個默認的run()方法是這樣的:

 public void run() { 
      if (target != null) { 
       target.run(); 
        } 
       } 

這裏,target是Runnable對象我們傳遞給線程的構造函數。所以線程開始執行Thread類的run()方法,該方法立即調用我們的可運行對象的run()方法。

+0

參見[定義和啓動一個Thread(http://download.oracle.com/javase/tutorial/essential/concurrency/runthread.html)。 – trashgod

+0

謝謝@saugok和垃圾 – Elamander

+0

正確答案@saugok! –

0

本質上,線程實現了Runnable。線程的運行函數調用「目標的」(目標實現Runnable的)運行方法(如果存在的話)。如下面的代碼所示,通常在創建線程對象時設置目標可運行。

注意:Runnable是一個匿名類,不需要深入研究它就可以將其視爲Runnable的子類。

Runnable run = new Runnable() { public void run() { /* code */ } }; // Create runnable 
new Thread(run).start(); // Create thread and start the thread. 
+2

或者,將'run'想象成一個匿名類的實例,它_implements_ ['Runnable']中的唯一方法(http://download.oracle.com/javase/6/docs/api/java/lang/ Runnable.html)接口。 – trashgod