从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池


线程池系列文章可参考下表,目前已更新完毕…

线程池系列: 文章
Java基础线程池 深入剖析Java线程池的核心概念与源码解析:从Executors、Executor、execute逐一揭秘
CompletableFuture线程池 从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池
SpringBoot默认线程池(@Async和ThreadPoolTaskExecutor) 探秘SpringBoot默认线程池:了解其运行原理与工作方式(@Async和ThreadPoolTaskExecutor)
SpringBoot默认线程池和内置Tomcat线程池 你是否傻傻分不清SpringBoot默认线程池和内置Tomcat线程池?

文章导图

image-20240526184903021

什么是CompletableFuture

JDK中的Future是什么可能大家都知道了,那CompletableFuture呢?从英文看单词CompletableFuture猜测应该也是和Future有关,具体如下:

  • CompletableFuture是Java 8引入的一个重要特性,它是Future接口的一个实现,但与传统的Future相比,提供了更强大、灵活的异步编程模型。
  • CompletableFuture支持非阻塞的链式调用、组合多个异步操作以及更优雅地处理异步计算的结果或异常。
  • 它允许你在异步操作完成时执行回调函数,且这些操作可以并行或串行执行,极大地提高了程序的并发能力和响应速度。

CompletableFuture用法总结

使用CompletableFuture需要掌握其核心方法,以下是一些常用方法的总结:

// 创建一个完成的CompletableFuture
CompletableFuture<String> completableFuture = CompletableFuture.completedFuture("Hello");

// 运行异步计算
CompletableFuture<Void> runAsyncFuture = CompletableFuture.runAsync(() -> {
    // 异步执行的代码
});

// 异步执行,并返回结果
CompletableFuture<String> supplyAsyncFuture = CompletableFuture.supplyAsync(() -> {
    return "Result";
});

// 转换和计算结果
CompletableFuture<String> transformFuture = supplyAsyncFuture.thenApply(result -> {
    return result.toUpperCase();
});

// 组合两个独立的CompletableFuture
CompletableFuture<String> combinedFuture = transformFuture.thenCombine(
        CompletableFuture.completedFuture(" World"),
        (s1, s2) -> s1 + s2
);

// 当CompletableFuture完成时执行某操作
supplyAsyncFuture.thenAccept(result -> {
    System.out.println("Result: " + result);
});

// 异常处理
CompletableFuture<String> exceptionFuture = supplyAsyncFuture.exceptionally(ex -> {
    return "Error occurred: " + ex.getMessage();
});

API总结

CompletableFuture提供了多种方法来创建、操作和组合CompletableFuture实例:

  • 创建异步计算supplyAsyncrunAsync是两个创建异步计算任务的静态方法,它们分别对应有返回值和无返回值的异步任务。
  • 结果转换thenApplythenApplyAsync方法允许对异步计算的结果进行转换。
  • 结果消费thenAcceptthenAcceptAsync允许你对结果进行消费,如打印结果。
  • 异常处理exceptionally方法提供了异常处理的能力,允许你为CompletableFuture的执行定义一个回调,用于处理异常情况。
  • 多个CompletableFuture的组合thenCombinethenComposeallOf等方法允许将多个CompletableFuture组合起来,创建更为复杂的异步流程。

更为详细的可以查看下表:

img

为什么使用CompletableFuture

异步编程模式可以帮助提高应用的响应性和吞吐量,特别是在处理长时间运行的任务时。使用CompletableFuture

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Apple_Web

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

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

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

打赏作者

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

抵扣说明:

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

余额充值