2011-07-14 11 views

答えて

3

、そのRunnableのrunメソッドに引数を与えるようにあなたはと第

NOはい、と言うことができます、Runnableインタフェースで定義されてrun()メソッド引数を取りません。 Runnableインターフェイスを実装するので、runnableインターフェイスのrun()メソッドを実装することになります。これはまったく引数のないメソッドです。

はい:ただし、引数を取ることができるrun()のオーバーロードされたメソッドを作成できます。コンパイラはそれについて不平を言うことはありません。しかし、を覚えておいてください。これは、スレッドの開始時に決して呼び出されません。常にno-arg run()メソッドを呼び出します。

例えば

class Test implements Runnable 
{ 
    public void run() { 
     // ... thread's task, when it is started using .start() 
     } 

    // Overloaded method : Needs to be called explicitly. 
    public void run(char a) { 
     //do something with char a ; 
    } 
} 
+0

ありがとう、それは私が知りたいと思ったものです:) –

+0

@SpiXel:あなたが疑問をクリアするのを助けることをうれしく思います。 –

+0

申し訳ありませんが、別の質問がありました。runメソッドを引数で明示的に呼び出す必要がある場合、同じクラスからいくつかのスレッドを実行するにはどうすればよいですか?私は、Testクラスにrunメソッドがあった場合、次のように10個のスレッドを作成していたとします。Thread t1 = new Thread(new Test())Thread t2 = new Thread(new Test())などしかし、今では、いくつかのスレッドを同じクラスで同時に実行させることができますか? –

4

いいえ、Runnableインタフェースはrunメソッドの引数を持っていないことを、単に事実のために、可能ではないthatsの。あなたは、スレッドのメンバー変数に値を代入し、それを使用することができます。

class Test implements Runnable 
{ 
    private final char a; 

    public Test(char a) { 
     this.a = a; 
    } 

    public void run() { 
     // do something with char a ; 
    } 
} 
0

Runnable.run()メソッドは引数を取らないと、あなたはそれを変更することはできません。しかし、スレッドに入力を渡して出力を返す方法があります。例えば:

public int someMethod(final int arg) throws InterruptedException { 
    final int[] result = new int[1]; 
    Thread t = new Thread(new Runnable() { 
     public void run() { 
      result[0] = arg * arg; 
     } 
    }); 
    t.start(); 
    // do something else 
    t.join(); 
    return result[0]; 
} 

run()方法のみ囲み方法のfinal変数を参照することができるが、これらの変数は可変オブジェクトへの参照とすることができること。例えばint[]

このバリエーションは、囲むクラスのインスタンス変数を使用することです。

Threadのサブクラスを作成し、そのrun()メソッドを実装し、引数と結果を渡すコンストラクタ引数、getter、またはsetterを使用できます。

関連する問題