У меня есть банка от разработчика. Этот jar содержит класс some.class.Executor , который может быть запущен и работает, пока я не убью процесс.
Есть два способа запустить этот класс.
- Из main () class (как точка входа).
- Из темы.
Первый вариант прост:
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 () имеет другое поведение?