为什么主线程等待CompletableFuture操作完成?

时间:2020-05-18 12:00:50

标签: java completable-future

我正在尝试使用CompletableFutures创建一个异步管道。但是问题是当我使用thenAccept方法而不是thenAcceptAsync时,我的主线程等待printNumber方法完成。我不明白为什么CompletableFutures中有一个同步方法。

当我运行以下代码时,Main方法正在等待printNumber完成。

输出:

number:5
Main method completed

这是我的代码;

public class Main {

    public static int generateNumber(){
        return 5;
    }

    public static CompletableFuture<Integer> create(){
        return CompletableFuture.supplyAsync(() -> generateNumber());
    }

    public static void printNumber(int number){
        try {
            Thread.sleep(8000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("number:" + number);
    }

    public static void main(String[] args) throws InterruptedException, ExecutionException {

        create().thenAccept(data -> printNumber(data));

        System.out.println("Main method completed");

    }
}

0 个答案:

没有答案