Java8 CompletableFuture 异步编程
原创
武汉淘淘 2022-07-05 17:21:50 博主文章分类:JAVA ©著作权
文章标签 多线程 java 异步 异步任务 异常信息 文章分类 Spark 大数据
©著作权归作者所有:来自51CTO博客作者武汉淘淘的原创作品,请联系作者获取转载授权,否则将追究法律责任
实现目标
- 理解各种异步类的使用模式,并熟练使用这些类。
- 熟悉需要的一些线程的调用模式
学习
1. 构造函数 supplyAsync 和 runAsync 的区别
supplyAsync表示创建带返回值的异步任务的,相当于ExecutorService submit(Callable task) 方法,runAsync表示创建无返回值的异步任务,相当于ExecutorService submit(Runnable task)方法,这两方法的效果跟submit是一样的,两个方法各重载了一个可置入
以下为回调函数
2. thenApply / thenApplyAsync 异步回调
前者是由执行job1的线程立即执行job2,即两个job都是同一个线程执行的
后者是将job2提交到线程池中异步执行,实际执行job2的线程可能是另外一个线程
3. thenAccept / thenRun
thenAccept 同 thenApply 接收上一个任务的返回值作为参数,但是无返回值;
thenRun 的方法没有入参,也买有返回值,测试用例如下:
4. exceptionally whenComplete handle
whenComplete 未发生异常正常返回值发生异常就返回异常
exceptionally确认会发生异常
handle 基本一致 区别在于 handle 有返回值
以下是组合处理
7 thenCombine / thenAcceptBoth / runAfterBoth
这三个方法都是将两个CompletableFuture组合起来,只有这两个都正常执行完了才会执行某个任务,区别在于,thenCombine会将两个任务的执行结果作为方法入参传递到指定方法中,且该方法有返回值;thenAcceptBoth同样将两个任务的执行结果作为方法入参,但是无返回值;runAfterBoth没有入参,也没有返回值。注意两个任务中只要有一个执行异常,则将该异常信息作为指定任务的执行结果。
8 applyToEither / acceptEither / runAfterEither
三个方法都是将两个CompletableFuture组合起来,只要其中一个执行完了就会执行某个任务,其区别在于applyToEither会将已经执行完成的任务的执行结果作为方法入参,并有返回值;acceptEither同样将已经执行完成的任务的执行结果作为方法入参,但是没有返回值;runAfterEither没有方法入参,也没有返回值。注意两个任务中只要有一个执行异常,则将该异常信息作为指定任务的执行结果。
9. thenCompose
thenCompose方法会在某个任务执行完成后,将该任务的执行结果作为方法入参然后执行指定的方法,该方法会返回一个新的CompletableFuture实例,如果该CompletableFuture实例的result不为null,则返回一个基于该result的新的CompletableFuture实例;如果该CompletableFuture实例为null,则,然后执行这个新任务。
10 thenCompose
thenCompose方法会在某个任务执行完成后,将该任务的执行结果作为方法入参然后执行指定的方法,该方法会返回一个新的CompletableFuture实例,如果该CompletableFuture实例的result不为null,则返回一个基于该result的新的CompletableFuture实例;如果该CompletableFuture实例为null,则,然后执行这个新任务
策略
- 分类API
- 单个写场景学习
参考内容
- gitee 代码
- 强烈推荐 Java8 CompletableFuture 用法全解
- Java8 AbstractExecutorService 和 FutureTask 源码解析
上一篇:deepin安装docker
下一篇:三姬分金智力题
提问和评论都可以,用心的回复会被更多人看到 评论
发布评论
全部评论 () 最热 最新
相关文章
[
Future异步调用
](https://blog.51cto.com/wj1891010/571551)
职场 多线程 休闲 异步调用
[
异步编程:promise and future
本文介绍C++中异步编程相关的基础操作类,以及借鉴promise and future思想解决回调地狱介绍。std::thread and std::jthreadstd::thread为C++11引入,一个简单的例子如下:class Worker final {public: void Execute() { std::cout << __FUNCT
](https://blog.51cto.com/u_13137973/7157569)
cpp
[
Java 8 Future、FutureTask、CompletableFuture 异步任务
Java 8 Future、FutureTask、CompletableFuture 异步任务
](https://blog.51cto.com/u_15891990/5908872)
数据 异步任务 程序运行
[
Future:异步任务结果获取
FutureTask 异步任务结果获取,ExecutorCompletionService 最佳实践,让并发编程获取任务结果更高效。
](https://blog.51cto.com/MageByte/2934217)
Future:异步任务结果获取
[
Java多线程–使用future进行异步编程
* 使用future进行异步编程* 缺点:* 不知道何时结束* 阻塞获取结果import java.util.co
](https://blog.51cto.com/zhangxueliang/4957961)
java 异步编程
[
Java异步之《我call(),Future在哪里》
我们大家都知道,在 Java 中创建线程主要有三种方式: 继承 Thread 类; 实现 Runnable 接口; 实现 Callable 接口。 而后两者的区别在于 Callable 接口中的 call() 方法可以异步地返回一个计算结果 Future,并且一般需要配合ExecutorServic
](https://blog.51cto.com/u_13296497/3381337)
后端 Java 线程池 子线程 主线程
[
Future和FutureTask实现异步计算
Java中使用Future和FutureTask实现异步计算
](https://blog.51cto.com/stevex/1576546)
Future FutureTask
[
flutter中的异步机制Future
饿补一下Flutter中Http请求的异步操作。 Dart是一个单线程语言,可以理解成物理线路中的串联,当其遇到有延迟的运算(比如IO操作、延时执行)时,线程中按顺序执行的运算就会阻塞,用户就会感觉到卡顿,于是通常用异步处理来解决这个问题。 Dart异步编程有两种方式:Future和Stream F
](https://blog.51cto.com/u_11827525/2854487)
flutter flutter教程 flutter案例
[
异步获取线程计算的结果-Future
Future 接口是 JDK1.5 开始提供,它的作用是异步获取线程计算的结果。看一个等待、获取任务执行结果的例子:package constxiong.interview;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concu
](https://blog.51cto.com/u_15061941/2591872)
java
[
Java | 一分钟掌握异步编程 | 4 - Future异步
作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我!前言前篇 Java | 一分钟掌握异步编程 | 3 - 线程异步 - 掘金 (juejin.cn) 介绍了实现多线程异步处理业务的方式,但是我们无法获取到线程返回的结果,这是在JDK 5之前Java版本的小小缺陷,在Java 5之后,增加了Fu
](https://blog.51cto.com/marsz/6172043)
Java Future
[
并发基础-Future异步回调模式
文章目录并发基础中的Future异步回调模式背景泡茶案例join异步阻塞使用join实现异步泡茶喝的实践案例join合并方法FutureTask
](https://blog.51cto.com/u_15776588/5644780)
netty Future异步回调 java 主线程 ide
[
Netty异步模型Future-Listener机制
链式处理每一步都有handler进行监听callback或future服务端代码addListener其他模块与下列连接一致
](https://blog.51cto.com/u_15477378/5143166)
java bootstrap ios ide
[
future java异步编程 java异步编程框架
1 Executor框架的简介 1.5后引入的Executor框架的最大优点是把任务的提交和执行解耦。要执行任务的人只需把Task描述清楚,然后提交即可。这个Task是怎么被执行的,被谁执行的,什么时候执行的,提交的人就不用关心了。具体点讲,提交一个Callable对象给ExecutorService(如最常用的线程池ThreadPoolExec
](https://blog.51cto.com/u_87634/6756712)
future java异步编程 java 线程池 主线程 返回结果
[
Future java 异步获得结果 java实现异步
1.概述随着对编写非阻塞代码的需求不断增长,我们需要异步执行代码的方法。在本教程中,我们将介绍几种使用Java实现异步编程的方法。另外,我们将探索一些提供即用型解决方案的Java库。 2. Java中的异步编程2.1 线我们可以创建一个新线程来异步执行任何操作。随着Java 8 中lambda表达式的发布,它变得更干净,更易读。让我们创建一个新的线程来计算和打印数字的阶乘:int nu
](https://blog.51cto.com/u_16213564/7443524)
Future java 异步获得结果 java 异步 java异步 java阶乘 Async
[
future java 异步返回 java 异步回调
文章目录前言一、回调简单理解二、Java中用接口实现回调1.实现接口回调1.1同步回调1.2 异步回调2.为啥要用接口实现3.关于接口(基础)总结 前言本文是作者在学习接口回调时看到 帖子中后,对其内容的理解和补充,仅供学习参考,如有错误感谢指正。一、回调简单理解小明和小李要一起去吃饭,但小李要先洗个脸。那么正常流程应该是小李先去洗个脸,然后通知小明一起去吃饭。 下面是一个简单的例子,小明等效
](https://blog.51cto.com/u_16099358/6761304)
future java 异步返回 java 编程语言 多线程 接口
[
java future异步 java异步是什么意思
在 Java 中,同步(Synchronization)是指一个线程获得了对象的锁,其他线程无法访问这个对象,直到该线程释放了这个对象的锁。同步是用于保证多个线程对共享资源的操作是互斥的,从而避免多线程带来的冲突。异步(Asynchronization)则指不需要等待另一个操作的完成,而是在它进行的同时继续执行其他操作。异步的好处在于可以提高程序的效率,因为它不需要等待另一个操作的完成,可以同时执
](https://blog.51cto.com/u_16099333/6575702)
java future异步 java jvm 开发语言 多线程
[
java future 异步返回结果 java 异步回调
java I/O的经历了BIO(Blocking IO),NIO(Non-blocking IO),AIO(Async-I/O),这些IO技术的发展都是依托已java版本的更新。 本文主要研究一下java的异步回调机制, 主要针对juc包下的Future,Callable,FutureTask。**业务场景 ** 假定我们有这样一个业务场景,烧一壶开水,烧一壶开水有如下几个步骤:加水打开煤气烧水i
](https://blog.51cto.com/u_16213672/7185777)
java future 异步返回结果 java 回调 System ide
[
future get异步 java 线程池 java 异步线程写法
Springboot 中异步线程的使用在过往的后台开发中,我们往往使用java自带的线程或线程池,来进行异步的调用。这对于效果来说没什么,甚至可以让开发人员对底层的状况更清晰,但是对于代码的易读性和可维护性却非常的差。开发人员在实际使用过程中,应该更多的将精力放置在业务代码的书写过程中,而不是系统代码的维护中。你需要懂,但是不需要你直接维护去写,这才是编程语言的风向标。(这也是为什么spring在
](https://blog.51cto.com/u_16099264/6691828)
java spring boot spring Async 线程池
[
.net core 获取异步方法结果 netty future获取异步
Netty 中的异步编程 Future 和 Promise Netty 中大量 I/O 操作都是异步执行,本篇博文来聊聊 Netty 中的异步编程。Java Future 提供的异步模型JDK 5 引入了 Future 模式。Future 接口是 Java 多线程 Future 模式的实现,在 java.util.concurrent包中,可以来进行异
](https://blog.51cto.com/u_16213667/7033383)
.net core 获取异步方法结果 System 异步编程 线程池
[
# FastDFS+FastDHT(单机+集群版) 使用docker-compose创建FastDFS+FastDHT(单机+集 docker搭建fastdfs
安装 拉取镜像docker pull delron/fastdfs创建本机存储目录rm -fR /home/docker/fastdfs/{tracker,storage} mkdir /home/docker/fastdfs/{tracker,storage} -p启动tracker[root@VM_80_14_centos ~]# docker run -d > –network=
](https://blog.51cto.com/u_14499/7735843)
docker安装fastdfs fastdfs 测试客户端 fastdfs搭建 docker 上传
[
javascript好难学啊 javascript容易学吗
JavaScript给初学者的印象总是那么的“杂而乱”,相信很多初学者都在找轻松学习JavaScript的途径。我试着总结自己学习多年JavaScript的经验,希望能给后来的学习者探索出一条“轻松学习JavaScript之路”。JavaScript给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽象、晦涩难懂,如:闭包、内置对象、DOM。B:本身内容很多,如函数库,对象库就一大堆。C:混
](https://blog.51cto.com/u_16099297/7738890)
javascript好难学啊 javascript 前端 设计模式 ViewUI
[
《聊聊架构》 聊天框架思维实战案例
各位亲: 由于过年(回家没有网络),本次更新为四篇文章。本篇是第一篇,主要介绍如何实现聊天消息的发送 框架的设计,这里主要设计到了观察者模式的应用。 首先在此祝大家新年快乐。 如果在公司某一天你的老大过来说,小张在咱们的app中的添加一个聊天功能吧(貌似支付宝正在推广这 个)。这个时候你是否一头雾水,什么IM协议,消息类型都不知道,那你要 怎么做呢?如何去调研等等工作呢?还
](https://blog.51cto.com/u_16099227/7741445)
《聊聊架构》 ui 框架 聊天 ide
[
MySQL各个区服的排行榜统计成总榜 mysql服务器在哪
MySQL 的服务器下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloadsMySQL 安装与配置准备工作在 C 盘根目录建立目录: c:\develop解压并移动位置解压缩 mysql-5.7.23 的压缩包,将其中的 mysql-5.7.23-xxxxx 目录移动到 C:\develop 目录下并把名字修改为 mysqlMySQ
](https://blog.51cto.com/u_16213674/7741934)
MySQL各个区服的排行榜统计成总榜 mysql MySQL SQL
[
spring boot nacos 修改命名空间 springboot修改包名
Springboot修改项目名称包名1、在文件夹中将项目重命名 2、IDEA打开项目;3、重命名下图所示iml文件; 4、打开Project Structure,修改项目名称,改完后项目名称会对应改变; 5、打开pom.xml文件,修改两处; 6、修改配置文件application.yml中服务名; 7、修改包名:右击包名,重命名,选择Rename package,修改名称即可; 8、右击启动类重
](https://blog.51cto.com/u_16213581/7743249)
git java 远程仓库 上传 重命名
本文转自 https://blog.51cto.com/u_15704977/5444805,如有侵权,请联系删除。
- 本文作者: 季末影
- 本文链接: https://www.jimoying77.top/2024/03/07/java/新建文件夹/java异步任务编排-2/
- 版权声明: 版权声明自定义文本