Редактировать: У меня вопрос другой, он не имеет отношения к связанному вопросу.Java Ожидание завершения всех тем
У меня есть следующий код с обработчиком завершения.
FutureTask<Void> futureTask = new FutureTask<Void>(() -> {
System.out.println("callback");
return null;
});
Runnable task =() -> {
for(int i=0; i<5; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
futureTask.run();
};
new Thread(task).start();
new Thread(task).start();
В основном я ищу обработчик завершения для переменного количества задач или есть другой подход?
Я вдохновлен этим answer, но кажется, что это часть какой-то библиотеки, в то время как я ищу собственное решение.
Вот моя попытка с завершающимися фьючерсами с обработчиком результата в конце.
public void test() {
CompletableFuture
.supplyAsync(() -> method1())
.supplyAsync(() -> method2())
.supplyAsync(() -> result());
}
public String method1() {
System.out.println("calling 1");
return "method1";
}
public String method2() {
System.out.println("calling 2");
return "method2";
}
public String result() {
System.out.println("result");
return "result";
}
Почему «futureTask.run();» не может быть заменен старым методом? –
Вы можете в основном объединить свои задачи, реализовав тот, который вызывает 'Thread.join()' на своем предшественнике (-ах), а затем делает все, что вам нужно. – Izruo
Возможный дубликат [ждать, пока все потоки не закончат работу в java] (http://stackoverflow.com/questions/7939257/wait-until-all-threads-finish-their-work-in-java) –