CompletableFuture runAsync vs supplyAsync,什么时候选择一个而不是另一个?

选择一个而不是另一个的理由是什么?在阅读文档后,我能推断出的唯一区别是,runAsync 将 Runnable 作为输入参数,而 supplyAsync 将 Supplier 作为输入参数。

这篇stackoverflow文章讨论了使用 Supplier和supplyAsync方法背后的动机,但它仍然没有回答何时更喜欢一个而不是另一个。


答案 1

runAsync 将 Runnable 作为输入参数并返回 ,这意味着它不返回任何结果。CompletableFuture<Void>

CompletableFuture<Void> run = CompletableFuture.runAsync(()-> System.out.println("hello"));

但是 suppyAsync 将 Supplier 作为参数并返回 with result 值,这意味着它不采用任何输入参数,但它返回结果作为输出。CompletableFuture<U>

CompletableFuture<String> supply = CompletableFuture.supplyAsync(() -> {
        System.out.println("Hello");
        return "result";
    });

 System.out.println(supply.get());  //result

结论:因此,如果要返回结果,请选择 或者如果您只想运行异步操作,请选择 。supplyAsyncrunAsync


答案 2

推荐