如何在Java中的Thread中将参数传递给Start方法?

时间:2019-02-26 07:50:46

标签: java

为什么我们不能在JAVA中将参数传递给thread.start()方法?为什么Java不提供此功能?

3 个答案:

答案 0 :(得分:3)

您可以将构造函数中的参数传递给Runnable对象

public class MyClass implements Runnable {

   public MyClass(Object parameter) {

   }

   public void run() {
   }
}

或lambda表达式:

 private static final ExecutorService executor = Executors.newCachedThreadPool();

    executor.submit(() -> {
        myFunction(parameter1);
    });

答案 1 :(得分:3)

start()方法刚刚开始执行Thread。它不需要任何参数,因为您可以预先配置Thread。例如,您可以在启动线程之前调用setDaemon(true)

如果要继承Thread,则可以创建自己的构造函数或getter和setter来配置所需的特定于域的依赖项。 (顺便说一句,我建议您创建一个实现Runnable的类,而不是将您的对象子类化并将其耦合到Thread。然后,您可以在需要运行时创建一个new Thread(runnable)它在一个线程中。)

答案 2 :(得分:0)

您可以将无限多个参数组合传递给start方法。所有这些组合及其处理逻辑都封装在Runnable接口中。因此,您可以创建Runnable的自定义实现,并将其传递给线程。这种方式是首选。

如果确实需要,可以从Thread类继承并使用参数,setters / getters等创建构造函数。

static class CustomThread extends Thread {
    int a;

    CustomThread(int a) {
        this.a = a;
    }

    @Override
    public void run() {
        System.out.println(a);
    }
}

static class CustomRunnable implements Runnable {
    int a;

    CustomRunnable(int a) {
        this.a = a;
    }

    @Override
    public void run() {
        System.out.println(a);
    }
}

public static void main(String[] args) {
    new CustomThread(1).start();
    new Thread(new CustomRunnable(2)).start();
}