'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