Java 如何将参数传递给线程
假设我想传递以下变量Java 如何将参数传递给线程,java,android,multithreading,arguments,Java,Android,Multithreading,Arguments,假设我想传递以下变量 String foo = "hello world"; 作为以下线程的参数 new Thread(new Runnable() { @Override public void run() { // SOME CODE HERE REQUIRES VARIABLE } }).start(); 有人能解释一下怎么做吗 谢谢 有人能解释一下怎么做吗 所以你的问题有更多的解决方案,但从一开始就很好。我建议您创建自己的Thread子类,并
String foo = "hello world";
作为以下线程的参数
new Thread(new Runnable() {
@Override
public void run() {
// SOME CODE HERE REQUIRES VARIABLE
}
}).start();
有人能解释一下怎么做吗
谢谢
有人能解释一下怎么做吗
所以你的问题有更多的解决方案,但从一开始就很好。我建议您创建自己的Thread
子类,并通过其构造函数传递参数
public class MyThread extends Thread {
public MyThread(String value) {
}
}
或者也可以使用Runnable
接口
public class MyThread implements Runnable { ... }
更新:
或者像@erickson指出的,您可以将代码包装到方法体中,但作为方法的参数,您必须传递final变量,因为您不能在不同方法中定义的内部类中引用非final变量。子类线程:
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();
}
在Java中不能使用匿名类传递参数。您可以创建一个单独的类并将其作为实例变量传递请参见此处:@TheGoodGiant在链接的问题线程中是子类的,而在此处它不是子类的。这里还有一个更简单的解决方案…-1没有必要贬低提问者。这是一个合理的问题。@jordan002贬低?你在开玩笑吧?我写了他可以使用的三种可能的方法。我提到了子类,因为如果他想更改这个变量,因为它被声明为final,这是不可能的。仅定义下一个帮助变量。抱歉,我不同意你的看法。如果他真的想从另一个线程更改变量的值,那么会有很多陷阱。@jordan002没有人,我只是从你的反馈中感到非常惊讶,这是第一次,这种反应,现在我知道你讨厌什么了,我用了它的话,真的很抱歉,我修复了它。@Sajmon看起来不错。你的答案很准确,FWIW。
String foo = "hello world";
final String parameter = foo;
new Thread(new Runnable() {
@Override
public void run() {
//Use parameter
}
}).start();