Future 和 Completable future 在这方面有什么区别?

What is the difference between Future and Completable future in this regards?

用例示例

在以下示例中使用 future 与 complete future 有什么区别。

我读到的主要用途之一是在可完成的未来使用 .apply(),您可以连接多个方法。

Future 不是将方法连接到 method() 中并在单独的线程中调用该方法() {which wired them}。

我发现他们都在做同样的事情。谁能解释一下?

class FutureExample {

    static boolean method1() {
        return true;
    }
    static boolean method2(boolean m) {
        return m;
    }

    static boolean method() {
        boolean v = method1();
        return method2(v);
    }

    public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(1); //initialize to 1 for Whosebug question
        Future<Boolean> future = service.submit(FutureExample::method);
    }
}

VERSUS

class CompletableFutureExample {

    static boolean method1() {
        return true;
    }
    static boolean method2(boolean m) {
        return m;
    }

    public static void main(String[] args) {
        CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(CompletableFutureExample::method1).thenApply(CompletableFutureExample::method2);
    }
}
  1. CompletableFuture 用于通过 运行 任务在与主线程不同的线程上编写 non-blocking 代码,并通知主线程进度。它可能有两种类型的结果:
    • 完成
    • 失败

这种情况下的主要区别在于您可以使用方法 .compleate(T t) 完成 Future 单元。

  1. 借助 CompletableFuture,您可以附加 Callable 方法:
    • thenAccept(Function f)
    • thenApply(...)
    • thenRun(...)

对于 Future,当它完成时您不会收到通知,对于 CompletableFuture,您有这种可能性。

希望我回答了你的问题。祝你有个愉快的一天。

  1. 第一种情况(仅Future):

    • 这两个方法总是在同一个线程中执行,这个线程被阻塞直到两个函数都完成

    • 无异步异常处理

    • 你不能轻易地combine/modify执行链:你总是需要为每个函数组合声明一个新方法

在此特定示例中,差异并不显着。的真正力量 当您需要 combine/merge 不同异步调用的结果、处理整个链的异常、管理线程等时,CompletableFuture(或更一般地 -- CompletionStage)出现