假设我想传递以下变量
String foo = "hello world";
作为以下线程的参数
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
}
}).start();
有人可以解释一下如何做到这一点。
谢谢。
假设我想传递以下变量
String foo = "hello world";
作为以下线程的参数
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
}
}).start();
有人可以解释一下如何做到这一点。
谢谢。
子类线程:
public class MyThread extends Thread {
private String arg;
public MyThread(String arg) {
this.arg = arg;
}
@Override
public void run() {
// Use your variable
}
}
声明为的局部变量final
将在线程中可见:
void doSomething(final String foo) {
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
System.out.println(foo);
}
}).start();
}
有人可以解释一下如何做到这一点。
所以你的问题有更多的解决方案,但从一开始就很好。我建议您创建自己的子类Thread
并通过其构造函数传递参数。
public class MyThread extends Thread {
public MyThread(String value) {
}
}
或者您也可以使用Runnable
界面。
public class MyThread implements Runnable { ... }
或者像@erickson 指出的那样,您可以将代码包装到方法体中,但作为方法的参数,您必须传递 final 变量,因为您不能引用在不同方法中定义的内部类中的非 final 变量。
您不能使用 Java 中的匿名类传递参数。您可以做的是创建一个单独的类并将其作为实例变量传递
String foo = "hello world";
final String parameter = foo;
new Thread(new Runnable() {
@Override
public void run() {
//Use parameter
}
}).start();