4

假设我想传递以下变量

String foo = "hello world";

作为以下线程的参数

new Thread(new Runnable() {

    @Override
    public void run() {
        // SOME CODE HERE REQUIRES VARIABLE
    }
}).start();

有人可以解释一下如何做到这一点。

谢谢。

4

5 回答 5

4

子类线程:

public class MyThread extends Thread {

   private String arg;

   public MyThread(String arg) {
      this.arg = arg;
   }

   @Override
   public void run() {
        // Use your variable
   }
}
于 2013-03-26T16:14:29.130 回答
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();
}
于 2013-03-26T16:15:04.827 回答
3

有人可以解释一下如何做到这一点。

所以你的问题有更多的解决方案,但从一开始就很好。我建议您创建自己的子类Thread并通过其构造函数传递参数。

public class MyThread extends Thread {

    public MyThread(String value) {

    }
}

或者您也可以使用Runnable界面。

public class MyThread implements Runnable { ... }

更新:

或者像@erickson 指出的那样,您可以将代码包装到方法体中,但作为方法的参数,您必须传递 final 变量,因为您不能引用在不同方法中定义的内部类中的非 final 变量。

于 2013-03-26T16:13:14.360 回答
0

您不能使用 Java 中的匿名类传递参数。您可以做的是创建一个单独的类并将其作为实例变量传递

于 2013-03-26T16:15:45.857 回答
0
String foo = "hello world";
final String parameter = foo;
new Thread(new Runnable() {

    @Override
    public void run() {
         //Use parameter
    }
}).start();
于 2013-03-26T16:15:53.150 回答