thenCombine的CompletableFuture无法完成工作并存在

时间:2018-10-01 21:04:26

标签: java multithreading completable-future

我对以下代码不了解。它减少到最低限度,但是在javafx应用程序中运行时效果是相同的。

public static void main(String[] args)中运行时,控制台将打印A并退出。在javafx应用程序中运行时,它将跳过该块。 在jshell中运行时,控制台将按预期打印:A B1 B2 C Fin

如果我将_Async与提供的Executor一起使用,则完全相同。

如果我取消注释// join(),它的行为将符合预期。

void func() {
        CompletableFuture.supplyAsync(() -> {
            System.out.println("A");
            return "A";
        })
        .thenAccept((a) -> {
            try {
                Thread.sleep(2 * 1000);
                System.out.println("B1");
            } catch (InterruptedException e) {
                System.out.println("Interrupted B1");
                e.printStackTrace();
            }
        })
        .thenCombineAsync(CompletableFuture.supplyAsync(() -> {
            try {
                Thread.sleep(2 * 1000);
                System.out.println("B2");
            } catch (Exception e) {
                System.out.println("Interrupted B2");
                e.printStackTrace();
            }
            return "B2";
        }), (a, b) -> {
            try {
                Thread.sleep(2 * 1000);
                System.out.println("C");
            } catch (InterruptedException e) {
                System.out.println("Interrupted C");
                e.printStackTrace();
            }
            return "C";
        })
        .thenRunAsync(() -> {
            System.out.println("Fin");
        });//.join();

    }

0 个答案:

没有答案