Java:CompletableFuture.supplyAsync()不调用异步方法

时间:2018-04-27 23:43:48

标签: java future completable-future

让我们假设以下主要方法:

public class Async {
    public static void main(String[] args) throws Exception {

        CompletableFuture.supplyAsync(Async::sendMsg);
        System.out.println(Thread.currentThread().getName());


    }

    public static String sendMsg() {
        try {
            TimeUnit.SECONDS.sleep(5);
            System.out.println(Thread.currentThread().getName());
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return null;
    }
}

我想在不阻塞主线程的情况下进行异步调用。但控制台仅输出以下字符串:

main

似乎没有调用sendMsg - 方法的输出。但为什么?我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

这是因为CompletableFuture.supplyAsync(Supplier)使用common ForkJoinPool,一旦程序(主线程)终止,任务就会自动终止。