1

谁能告诉我是否有办法运行一个线程并给它一个参数?就像给那个Runnable的run方法一个参数,就像

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方法的参数。您可以将值分配给 Thread 的成员变量并使用它:

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 接口,因此您将实现run()Runnable 接口的方法,它恰好是一个无参数方法。

是:run()但是,您可以创建可以带参数的重载方法。编译器不会抱怨它。但请记住一件事,线程启动时永远不会调用它。它将始终调用无参数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()方法,并使用构造函数参数、getter 和/或 setter 传递参数和结果。

于 2011-07-14T09:39:34.523 回答