为什么我们不能在JAVA中将参数传递给thread.start()方法?为什么Java不提供此功能?
答案 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();
}