Здесь я вызываю три потока, второй и третий потоки ждут завершения первого потока и затем запускаются параллельно. Если я использую executor.shutdown()
, тогда выполняется только первая задача. Я хочу знать, как выключить исполнитель после всех мои нити сделаны выполнениямиКак отключить исполнитель при его использовании с помощью CompletableFuture
public static void main(String[] args) {
System.out.println("In main");
ExecutorService executor = Executors.newFixedThreadPool(3);
CompletableFuture<Void> thenCompose = supplyAsync(() -> doTask1(), executor)
.thenCompose(resultOf1 -> allOf(
runAsync(() -> doTask2(resultOf1), executor),
runAsync(() -> doTask3(), executor)
));
//executor.shutdown();
System.out.println("Exiting main");
}
private static void doTask3() {
for(int i=0; i<5;i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(3);
}
}
private static void doTask2(int num) {
for(int i=0; i<5;i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(num);
}
}
private static int doTask1() {
for(int i=0; i<5;i++) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print(1);
}
return 5;
}
Выхода С
executor.shutdown()
In main
Exiting main
11111
Выход Без
executor.shutdown()
In main
Exiting main
111113535353535
But the program doesn't terminates.
Я хотел бы попробовать, добавив последнее задание в CompletableFuture '.thenRun (() -> {executor.shutdown(); }); ' – Nadir
Спасибо, что сработал. Можете ли вы опубликовать его в качестве ответа, чтобы я мог его принять. – Zeeshan