2011-11-07 9 views
0

次のコードを見てみましょう。Runnableインターフェイスをスレッド実装クラスで実装する必要のない単純なJavaのスレッドシナリオ

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

Runnabletempメソッド内anonymous inner classによって実装されている:DemoThreadのインスタンスがは、それがRunnableを実装するかどうか、Threadコンストラクタに渡されていないことを考えると

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

は完全に直交していますスレッドの実行方法まで

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で何もしていません。 Runnableを実装する匿名クラスをラップする新しいThreadを生成しています。

​​

新しいクラスを作成します。 javacを実行するとファイルシステムに表示されます。

2

Runnableインターフェイスを実装する必要があるものは、実行するスレッドオブジェクトにパラメータとして渡すオブジェクトです。

あなたのケースでは、すでにRunnableを実装している匿名クラスが宣言されています。これは、Threadオブジェクトに渡されるRunnableを実装しています。

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