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