如何将参数传递给线程

时间:2013-03-26 16:11:35

标签: java android multithreading arguments

假设我想传递以下变量

String foo = "hello world";

作为以下线程的参数

new Thread(new Runnable() {

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

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

感谢。

5 个答案:

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