前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CompletableFuture工具类解释

CompletableFuture工具类解释

原创
作者头像
查拉图斯特拉说
发布2024-01-25 23:00:37
970
发布2024-01-25 23:00:37
举报
文章被收录于专栏:后端架构后端架构

前言

Java 8 新增了 `CompletableFuture` 类,用以简化同步编程及线程协作。借助此功能,无需依赖繁琐复杂的回调机制即可掌控异步计算过程,随时应对串行或并行的资源消耗需求。

使用

无论是执行耗时任务,还是异步交互都能轻松驾驭, `CompletableFuture` 无疑为代码维护与阅读带来极大便利。此外,其丰富实用的异常处理、超时监测功能,进一步确保程序的稳定性和健壮性。

`CompletableFuture` 堪称 Java 中最实用的异步编程利器之一,让程序开发变得更为流畅自如。

代码语言:javascript
复制
        CompletableFuture.runAsync(() -> applicationInits.forEach(applicationInit -> {
            try {
                applicationInit.init();
            } catch (Exception e) {
                logger.error("run ", e);
            }
        }))

`CompletableFuture` 类的底层实现涉及到 Java 并发包中的一些重要概念,比如线程池、ForkJoinPool、Future 接口等。

在 `CompletableFuture` 的底层实现中,它利用了 `ForkJoinPool` 来管理异步任务的执行。`ForkJoinPool` 是 Java 并发包中用于实现任务分解的线程池,它能够更好地利用多核处理器的特性来提高并行任务的执行效率。

`CompletableFuture` 通过 `CompletableFuture.supplyAsync()`、`CompletableFuture.thenApply()` 等方法来创建和组合异步任务,然后利用 `ForkJoinPool` 来执行这些任务。它还利用了 `Future` 接口来表示异步计算的结果,并通过回调的方式来处理任务的完成和异常情况。

CompletableFuture.supplyAsync() 方法接受一个 Supplier 参数,用于执行一个异步任务并返回一个 CompletableFuture 对象,该对象最终会包含异步任务的结果。

代码语言:javascript
复制
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // 异步执行的任务
    return "Hello";
});

CompletableFuture.thenApply() 方法接受一个 Function 参数,用于对 CompletableFuture 的结果进行转换,并返回一个新的 CompletableFuture 对象,该对象会包含转换后的结果。

代码语言:javascript
复制
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // 异步执行的任务
    return "Hello";
}).thenApply(result -> {
    // 对结果进行转换
    return result + " World";
});

通过这两个方法,我们可以方便地创建和组合异步任务,实现串行和并行的异步操作。supplyAsync() 用于创建一个异步任务,而 thenApply() 则用于对任务的结果进行转换或处理。

supplyAsync方法内部实现

asyncRunStage方法运行了一个异步的任务

thenApply方法内部实现

他这个同步任务做的简单粗暴,就用个VR循环来进行一个处理。

总结

总的来说,`CompletableFuture` 的底层实现依赖于 Java 并发包中的一些关键组件,利用这些组件来实现异步任务的管理和执行。java8还是很多新的一些并发工具类,值得去探索和接待。

最后

点赞关注评论一键三连,每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 使用
  • supplyAsync方法内部实现
  • thenApply方法内部实现
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档