当前位置: 首页 > news >正文

CompletableFuture使用详解,多线程相关

CompletableFuture笔记

  • 一. 创建异步任务
  • 二.异步回调处理
  • 三.多任务组合处理
  • 四.总结

原文: https://blog.csdn.net/zsx_xiaoxin/article/details/123898171

CompletableFuture是jdk8的新特性。CompletableFuture实现了CompletionStage接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。

一. 创建异步任务

  1. supplyAsync 有返回值
  2. runAsync 无返回值
  3. 获取执行结果
// 如果完成则返回结果,否则就抛出具体的异常
public T get() throws InterruptedException, ExecutionException // 最大时间等待返回结果,否则就抛出具体异常
public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException// 完成时返回结果值,否则抛出unchecked异常。为了更好地符合通用函数形式的使用,
// 如果完成此 CompletableFuture所涉及的计算引发异常,则此方法将引发unchecked异常并将底层异常作为其原因
public T join()// 如果完成则返回结果值(或抛出任何遇到的异常),否则返回给定的 valueIfAbsent。
public T getNow(T valueIfAbsent)// 如果任务没有完成,返回的值设置为给定值
public boolean complete(T value)// 如果任务没有完成,就抛出给定异常
public boolean completeExceptionally(Throwable ex) 

二.异步回调处理

用来处理顺序的任务,前一个执行完后,在执行后一个,可获取前面的返回值,并返回数据
前一个执行完,再执行当前,将前面返回值作为参数

  1. thenApply和thenApplyAsync: 有参数,有返回值
  2. thenAccept和thenAcceptAsync: 有参数,无返回值
  3. thenRun和thenRunAsync: 无参,无返回值
  4. whenComplete和whenCompleteAsync: 有参(参数中包含异常),无返回值
  5. handle和handleAsync: 有参(参数中包含异常),有返回值

三.多任务组合处理

  1. thenCombine、thenAcceptBoth 和runAfterBoth: 两个任务,都成功再执行下一个; 分别:有参有返回,有参无返回,无参无返回
  2. applyToEither、acceptEither和runAfterEither: 两个任务,一个成功,就执行下一个, 分别:有参有返回,有参无返回,无参无返回
  3. allOf : 多个任务都成功,就执行主线程
  4. anyOf : 多个任务有一个成功,就执行主线程

四.总结

  1. 带apply表示运用,有参,有返回值
  2. 带accept表示接受,有参,无返回值
  3. 带Async表示异步,会另起线程,可以自定义线程池,否则用默认线程池ForkJoinPool.commonPool()
  4. 该类用于对异步方法进行编排,即对多个异步任务 顺序执行、并列执行、条件执行(两者都成功再执行,两者成功一个就执行)
    细节,请看原文,此处只记录下主要使用方法和功能
http://www.lryc.cn/news/91323.html

相关文章:

  • (3)NUC980 kenerl编译
  • 华为OD机试真题 Java 实现【分奖金】【2022Q4 100分】
  • 迅为国产化RK3588开发板在安防前后端应用解决方案
  • Windows 安装 GCC
  • 下载安装LabVIEW
  • 从C语言到C++_14(vector的常用函数+相关选择题和OJ题)
  • Java NIO-非阻塞I/O(二)
  • PaaS平台iuap——数智底座支撑企业的全球化业务拓展
  • RK3318 android12 HEVC-1080P 4K VP9等格式视频播放不了
  • gpt技术简介以及具体应用领域
  • 【java】leetcode 二叉树展开为链表
  • windows环境, nginx https配置
  • git 命令
  • 【高分论文密码】大尺度空间模拟预测与数字制图
  • Word控件Aspose.Words教程:使用 C# 读取 SXC 和 FODS 文件
  • 代码示范【FabEdge v0.8.0】配置 connector 公开端口
  • 通过Python的PyPDF2库合并多个pdf文件
  • python基础 - python命名空间与作用域
  • MapReduce实战案例(3)
  • Socket(三)
  • 【JVM】12. 垃圾回收相关概念
  • Java 版 spring cloud 工程系统管理 工程项目管理系统源码 工程项目各模块及其功能点清单
  • 【Linux系统基础快速入门详解】Linux系统命令行介绍、命令提示符知识详解: ~/#/@等符号
  • Python 面向对象编程笔记:中级面向对象
  • JVM学习笔记(上)
  • 反爬虫技术
  • JAVA中.equals()与 ==的区别
  • 华为OD机试之羊、狼、农夫过河(Java源码)
  • C++ string的简单应用
  • Java中的阻塞队列