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();