Java 8 CompletableFuture 学习及实践笔记

CompletableFuture 学习及实践笔记

CompletableFuture 是 Java 8 引入的一个强大的异步编程工具,它提供了一种简洁而灵活的方式来处理异步操作和构建复杂的异步流程。

创建 CompletableFuture

使用 CompletableFuture.supplyAsync(Supplier<U> supplier) 方法创建一个 CompletableFuture,该方法会异步执行提供的 Supplier 函数,并返回一个 CompletableFuture 对象。

使用 CompletableFuture.runAsync(Runnable runnable) 方法创建一个 CompletableFuture,该方法会异步执行提供的 Runnable 函数,并返回一个 CompletableFuture 对象。

异步操作和回调

使用 thenApply(Function<? super T,? extends U> function) 方法可以在 CompletableFuture 中注册一个转换函数,当 CompletableFuture 完成时,将触发该函数,并将结果传递给下一个 CompletableFuture。

使用 thenAccept(Consumer<? super T> action) 方法可以注册一个消费者函数,当 CompletableFuture 完成时,将触发该函数,并处理结果。

使用 thenRun(Runnable action) 方法可以注册一个 Runnable 函数,当 CompletableFuture 完成时,将触发该函数,不接收任何输入。

异常处理

使用 exceptionally(Function<Throwable,? extends T> exceptionFunction) 方法可以注册一个异常处理函数,当 CompletableFuture 发生异常时,将触发该函数,并返回一个备选结果。

使用 handle(BiFunction<? super T,Throwable,? extends U> handler) 方法可以注册一个处理函数,当 CompletableFuture 完成时,无论是正常结果还是异常结果,都会触发该函数。

组合多个 CompletableFuture

使用 thenCompose(Function<? super T, ? extends CompletionStage<U>> fn) 方法可以将两个 CompletableFuture 链接起来,当第一个 CompletableFuture 完成时,将触发提供的函数,并返回一个新的 CompletableFuture 对象。

使用 thenCombine(CompletionStage<? extends U> other, BiFunction<? super T,? super U,? extends V> fn) 方法可以组合两个 CompletableFuture 的结果,并在两者都完成时触发提供的函数。

使用 allOf(CompletableFuture<?>... cfs) 方法可以等待多个 CompletableFuture 都完成后再执行某个操作。

等待 CompletableFuture 完成

使用 get() 方法可以阻塞当前线程,直到 CompletableFuture 完成,并获取 CompletableFuture 的结果。

使用 join() 方法可以等待 CompletableFuture 完成,并获取 CompletableFuture 的结果,但不会抛出 checked 异常。

超时处理

使用 completeOnTimeout(T value, long timeout, TimeUnit unit) 方法可以设置 CompletableFuture 在指定的时间内完成,如果超过指定时间仍未完成,将使用提供的默认值进行完成。

使用 orTimeout(long timeout, TimeUnit unit) 方法可以设置 CompletableFuture 在指定的时间内完成,如果超过指定时间仍未完成,将抛出 TimeoutException。

通过学习 CompletableFuture,你可以更好地处理异步操作和复杂的异步流程,提高代码的性能和可读性。它提供了更加灵活和简洁的编程方式,使得异步编程变得更加容易和优雅。

实战

将四个线程并发执行,最后汇总执行结果
在这里插入图片描述
最后使用get()方法获取各线程执行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89012.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网最全Python系列教程(非常详细)---字符串讲解(学Python入门必收藏)

&#x1f9e1;&#x1f9e1;&#x1f9e1;这篇是关于Python中字符串的讲解&#xff0c;涉及到以下内容&#xff0c;欢迎点赞和收藏&#xff0c;你点赞和收藏是我更新的动力&#x1f9e1;&#x1f9e1;&#x1f9e1; 本文将从以下几个方面展开对字符串的讲解&#xff1a; 1、字…

如何使用docker快速部署MinDoc文档系统

MinDoc是非常优秀的知识分享系统&#xff0c;但是很多刚接触的人会一脸懵逼&#xff0c;而且官方文档写的也并不清晰&#xff0c;所以和大家分享一下快速部署MinDoc的方法。 首先docker环境先自行安装好&#xff0c;这里不再赘述。 拉取docker镜像&#xff1a; docker pull …

【开发篇】九、SpringBoot整合ES(ElasticSearch)

文章目录 1、整合2、简单示例3、一点补充4、增删改查索引与文档 1、整合 整合思路都一样&#xff0c;先起步依赖或普通依赖&#xff0c;再配置&#xff0c;再封装的操作对象。先引入依赖&#xff1a; <dependency> <groupId>org.springframework.boot</grou…

基于Java的电影评论网站设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Java的电影评论网站…

IntelliJ IDEA - Maven 在控制台Maven编译正常,但是在IDEA中不正常,表现不一致

文章目录 现象原因解决验证 现象 一个Maven项目&#xff0c;当导入到IDEA后&#xff0c;无法在IDEA中正常的编译和下载jar依赖&#xff0c;类似下面的截图。 但是在Windows控制台却可以正常编译&#xff0c;类似下面的截图。 CMD执行&#xff1a;mvn clean install -Dmaven.te…

水库河道生态流量监测系统的主要内容

一、系统背景 我国为保护河流生态环境&#xff0c;推动水资源科学、合理、有序开发和可持续利用&#xff0c;各地水利和环保部门相继出台措施对不满足生态流量下泄要求的水电站责令整改或挂牌督办。近几年几百家水库在各个主要流域建成&#xff0c;由于缺乏对各个水库生态下泄流…

为什么说软文能够扩大中小企业的品牌影响力?

在当今的商业环境中&#xff0c;品牌影响力对于企业的成功至关重要。对于中小企业来说&#xff0c;利用软文来打造品牌影响力是一种成本低且效果更高的方式。为什么说软文能够扩大中小企业的品牌影响力呢&#xff1f;下面就让媒介盒子告诉你。 一、塑造品牌形象 首先&#xff…

走心分享!天津诚筑说Java大数据培训我该如何选择?

随着互联网的发展&#xff0c;IT行业变得越来越炙手可热&#xff0c;其中较为火热的当属大数据和Java了&#xff0c;许多学员都很纠结&#xff0c;Java和大数据我应该如何选择呢?今天小编带大家了解一下Java和大数据之间的区别&#xff01; Java和大数据的关系 Java是一种面…

搭建安信可小安派Windows 开发环境

搭建小安派Windows 开发环境 Ai-Pi-Eyes 系列是安信可开源团队专门为Ai-M61-32S设计的开发板&#xff0c;支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口&#xff0c;具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SP…

Mojo:新AI语言中的7个惊人的Python升级

一、说明 AI发展是日新月异的&#xff0c;对于新模型的产生&#xff0c;我们不能不给以关注。Mojo就是一种新发布的编程语言&#xff0c;专为AI开发人员制作&#xff0c;由Modular制作&#xff0c;Modular是一家由Swift的原始创建者Chris Lattner创立的公司。 二、关于MOJO的概…

vue实现移动端悬浮可拖拽按钮

需求&#xff1a; 按钮在页面侧边悬浮显示&#xff1b;点击按钮可展开多个快捷方式按钮&#xff0c;从下向上展开。长按按钮&#xff0c;则允许拖拽来改变按钮位置&#xff0c;按钮为非展开状态&#xff1b;按钮移动结束&#xff0c;手指松开&#xff0c;计算距离左右两侧距离…

uniapp使用scroll-into-view实现锚点定位和滚动监听功能【楼层效果 / 侧边导航联动效果】

大佬网址&#xff1a; https://blog.csdn.net/weixin_47136265/article/details/132303570 效果 代码 <template><view class"main"><scroll-view scroll-y"true" class"left-content"><view class"left-item"…

目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)

文章目录 一、演示多分类效果二、PaddleClas介绍三、代码获取四、数据集获取五、环境搭建六、数据格式分析七、模型训练7.1 模型恢复训练7.2 多卡训练7.3 其他训练指标 八、模型预测九、模型评估十、PaddleClas相关博客 一、演示多分类效果 二、PaddleClas介绍 PaddleClas主要…

Java实现文档格式转换与模板渲染 LibreOffice jodconverter

Java Office 一、文档格式转换 文档格式转换是office操作中经常需要进行一个操作&#xff0c;例如将docx文档转换成pdf格式。 java在这方面有许多的操作方式&#xff0c;大致可以分为内部调用&#xff08;无需要安装额外软件&#xff09;&#xff0c;外部调用&#xff08;需…

【boost网络库从青铜到王者】第七篇:asio网络编程中的异步echo服务器,以应答为主

文章目录 1、简介2、echo模式应答异步服务器2.1、Session会话类2.2、Server类为服务器接收连接的管理类 3、客户端4、隐患5、总结 1、简介 前文已经介绍了异步操作的api&#xff0c;今天写一个简单的异步echo服务器&#xff0c;以应答为主。 2、echo模式应答异步服务器 2.1、…

【钻石OA】1区SCI,无需版面费,仅2个月录用!

重 点 本期推荐 本期小编给大家推荐的是无需版面费的1区农林科学类SCI&#xff08;钻石OA&#xff09;。 目前进展顺利&#xff0c;在WOS数据库中各项指标表现良好&#xff0c;且无预警记录。 领域符合录用率高&#xff0c;1区SCI最快2个月录用&#xff01; 期刊官网系统提…

零距离揭秘绝地求生:玩家最关心的吃鸡要领和细节全攻略!

绝地求生作为当下最火爆的吃鸡游戏&#xff0c;吸引了无数玩家的关注和参与。然而&#xff0c;要成为顶尖的吃鸡玩家&#xff0c;并不简单。在这篇文章中&#xff0c;我们将为你揭露绝地求生玩家最关心的吃鸡要领和细节&#xff0c;为你提供一份全方位的游戏指南&#xff01; 1…

vue内置组件Transition的详解

1. Transition定义 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition>会在一个元素或组件进入和离开 DOM 时应用动画。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被插入&#xff0c;移动&#xff0…

八大排序详解

目录 1.排序的概念及应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 直接插入排序 2.1.1 基本思想 2.1.2 动图解析 2.1.3 排序步骤&#xff08;默认升序&#xff09; 2.1.4 代码实现 2.1.5 特性总结 2.2 希尔排序 2.2.1 基本思…

修改Jenkins主目录

Windows系统上安装了Jenkins后&#xff0c;默认数据目录&#xff0c;也就是工作区目录&#xff0c;即&#xff1a;每次构建的项目数据文件所在目录为&#xff1a; 随着构建项目的增多&#xff0c;一直用这个目录&#xff0c;C盘东西越来越多&#xff0c;电脑就会越来越卡&#…