有人能告诉我是否有办法运行一个线程并给它一个参数?就像给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 ;
}
}
答案 0 :(得分: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 ;
}
}
答案 1 :(得分:3)
你可以说,是和否。
Runnable接口中定义的 NO: 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 ;
}
}
答案 2 :(得分:0)
Runnable.run()
方法不接受任何参数,您无法更改它。但是有一些方法可以将输入传递给Thread并从Thread返回输出。例如:
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来传递参数和结果。