CompletableFuture.supplyAsync和runAsync区别

介绍

CompletableFuture 是 Java 中用于异步编程的一个重要类,提供了一种方便的方式来处理异步任务。CompletableFuture.supplyAsync 和 CompletableFuture.runAsync 是 CompletableFuture 中的两个常用方法。它们都用于启动一个异步任务,但是它们之间也有一些差异。下面我们分别描述这两个方法。

CompletableFuture.supplyAsync

CompletableFuture.supplyAsync 用于执行一段需要有返回值的异步计算,它接收一个实现了 Supplier 接口的匿名函数作为参数,该函数会在另外一个线程中异步地执行。

Supplier 接口是一个函数式接口,它只有一个抽象方法 get(),没有参数,返回一个指定类型的值。在 CompletableFuture.supplyAsync 中,使用该接口来执行异步计算并返回结果。例如:

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // 需要执行的异步任务代码
    String result = "Hello World!";
    return result;
});

// 获取异步任务的结果
String result = future.get();

其中,参数是一个 lambda 表达式,它实现了上面所述的 Supplier 接口的 get() 方法。这个 lambda 表达式将异步计算的结果“Hello World!”返回给调用者。CompletableFuture.supplyAsync 会在另外一个线程中执行这个任务,直到调用 get() 方法的线程得到了异步计算的结果。

CompletableFuture.runAsync

CompletableFuture.runAsyncCompletableFuture.supplyAsync 类似,但是前者没有返回值,其参数是实现了 Runnable 接口的匿名函数。Runnable 接口也是一个函数式接口,只有一个抽象方法 run(),用于定义异步执行的任务代码。例如:

CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
    // 需要执行的异步任务代码
    for (int i = 0; i < 10; i++) {
        System.out.println(i);
    }
});

// 等待异步任务执行完成
future.join();

CompletableFuture.runAsync 中,同样通过匿名函数的方式来指定需要执行的异步任务,它使用 Runnable 接口来表示异步任务(上面的例子只是简单地输出一些数字)。需要注意的是,runAsync 方法返回类型是 CompletableFuture<Void>,因为该方法并没有返回值。

总结

CompletableFuture.supplyAsyncCompletableFuture.runAsync 都是 CompletableFuture 中常用的方法,可以用于启动异步任务。CompletableFuture.supplyAsync 用于执行有返回值的异步计算,而 CompletableFuture.runAsync 则用于执行没有返回值的异步任务。可以通过实现相应的接口来编写需要执行的异步任务的代码,从而让 CompletableFuture 处理异步执行和获取结果的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安静的胖大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值