1

スレッドを実行して引数を与える方法があるかどうか誰か教えてもらえますか? その Runnable の run メソッドに引数を与える、sth like

class Test implements Runnable 
{
     public void run( char a ) { // the question's here ,
                                 //is there any way to run a thread , 
                                 //indicating an argument for it ? 
        do  something with char a ;  
     }
}
4

3 に答える 3

4

いいえ、それは不可能です。単純に、Runnableインターフェイスにはメソッドの引数がないためrunです。値をスレッドのメンバー変数に割り当てて使用できます。

class Test implements Runnable 
{
     private final char a;

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

     public void run() {
       // do  something with char a ;  
     }
}
于 2011-07-14T09:23:16.593 に答える
3

はい、いいえと言うことができます。

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

YES :run()ただし、引数を取ることができるのオーバーロードされたメソッドを作成できます。コンパイラはそれについて文句を言いません。ただし、1 つ覚えておいてください。これは、スレッドの開始時に呼び出されることはありません。常に引数なしの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 ;  
     }
}
于 2011-07-14T09:22:51.580 に答える
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()コンストラクター引数、ゲッター、セッターを使用して引数と結果を渡すこともできます。

于 2011-07-14T09:39:34.523 に答える