2011-07-09 6 views
3

私は初心者です。 1つの疑い。Java:スレッドを呼び出すRunnable

スレッドクラスのrun()メソッドは、内部的にRunnableインターフェイスのrun()を呼び出します。

私の質問は、Threadクラスのrun()方法は、Runnableインタフェースのrun()を呼び出す方法、

のですか?

ありがとうございます。

答えて

5

Runnableインターフェイスには、run()メソッドが1つしかありません。 Threadクラスは実際には クラスはRunnableインターフェイスを実装しています。

したがって、スレッドクラスから継承すると、サブクラスもRunnableインターフェイスを実装します。

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

を新しいThreadオブジェクトのstart()メソッドは、コントロールの新しいスレッドの実行を開始するために呼び出されます。ここでは

はそれをすべてが起こるか、例を示します。

実行可能オブジェクトをスレッドオブジェクトのコンストラクタに渡す必要がある理由は、スレッドが実行するメソッドに到達するための方法がある必要があるということです。私たちはもはや、Threadクラスのrun()メソッドをオーバーライドしているので、Threadクラスのデフォルトrun()メソッドが実行されていない、 このデフォルトのrun()メソッドは次のようになります。ここでは

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

targetは、実行可能なオブジェクトがあります私たちはスレッドのコンストラクタに渡しました。したがって、スレッドはスレッドクラスのrun()メソッドで実行を開始します。このメソッドはすぐに実行可能オブジェクトのrun()メソッドを呼び出します。

+0

は(http://download.oracle.com/javase/tutorial/essential/concurrency/runthread.html)[スレッドの定義と起動]も参照してください。 – trashgod

+0

ありがとう@サウゴクとゴミ箱 – Elamander

+0

正解@サウォク! –

0

本質的に、ThreadはRunnableを実装しています。 Threadのrun関数は、 "target"(targetがRunnableを実装する)メソッドを起動します(存在する場合)。以下のコードが示すように、通常は、Threadオブジェクトの作成時にターゲットの実行可能ファイルを設定します。

注:Runnableは匿名クラスであり、それをRunnableのサブクラスとして考える必要はありません。

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

あるいは、 'run'を匿名クラスのインスタンスとして考えると、' 'Runnable''(http://download.oracle.com/javase/6/docs/api/java/lang/)の孤独なメソッドを実装しています。 Runnable.html)インターフェイス。 – trashgod

関連する問題