问题
I consider that main thread must end after sub thread.But below code shows the process finished before print the "async end".What is the reason?Can anybody explain?Thx.
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");
}
}
回答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.
来源:https://stackoverflow.com/questions/56054176/why-completablefuture-runasync-is-not-executed