我有开发人员提供的jar。这个罐子包含 some.class.Executor 类,该类可以启动并起作用,直到我终止该进程。
有两种方法可以运行此类。
第一个选项很简单:
public static void main(String[] args) {
some.class.Executor.main(args);
}
它工作正常。但是,当我尝试从我的线程中运行此代码时:
public class CustomExecutor extends AbstractExecutor {
public CustomExecutor(String scenario) {
this.args[0] = scenario;
}
@Override
public String generateName() {
return CustomExecutor.class.getSimpleName() + "-" + UUID.randomUUID().toString();
}
public void run() {
some.class.Executor.main(getArgs());
}
抽象执行者就是:
public abstract class AbstractExecutor extends Thread {
protected String[] args;
AbstractExecutor() {
this.args = new String[1];
setName(generateName());
setDaemon(false);
}
public abstract String generateName();
public void register() {
WorkerStorage.getInstance().add(getName(), this);
}
public void launch() {
register();
WorkerStorage.getInstance().getThreadMap().get(getName()).start();
}
所以基本上我运行相同的方法,但是从我的线程开始。它死了。将线程状态更改为 TERMINATED 。
两个运行选项之间有很大区别吗?为什么main()方法具有不同的行为?