'Why CompletableFuture.runAsync is not executed? [duplicate]
I consider that main thread must end after sub thread. However, below code shows the process finished before print the "async end". What is the reason? Can anybody explain?
import java.util.concurrent.CompletableFuture;
public class Test {
public static void main(String[] args) {
CompletableFuture.runAsync(() -> {
try {
System.out.println("async start");
Thread.sleep(3000);
System.out.println("async end");
} catch (InterruptedException e) {
e.printStackTrace();
}
});
System.out.println("main end");
}
}
Solution 1:[1]
It is executed, you just aren't waiting for the result.
The Javadoc of CompleteableFuture.runAsync()
says:
Returns a new CompletableFuture that is asynchronously completed by a task running in the
ForkJoinPool.commonPool()
after it runs the given action.
The Javadoc of ForkJoinPool.commonPool()
says:
Any program that relies on asynchronous task processing to complete before program termination should invoke
commonPool().awaitQuiescence()
, before exit.
So, invoke that.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 |