前身 Future

作用

  • 定义了操作异步任务执行的一些方法,如获取异步任务的执行结果、取消任务的执行、判断任务执行是否完毕等。专门用来为主线程处理耗时的任务

特点

  • 多线程
  • 有返回值
  • 异步处理

实现类FutureTask

代码示例

public class FutureThread {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask<String> futureTask = new FutureTask<>(new mythread2());Thread t1 = new Thread(futureTask,"t1");
t1.start();String s = futureTask.get();System.out.println(s);}}class mythread2 implements Callable<String>{@Overridepublic String call() throws Exception {System.out.println("come in deep dark fantasy!");return "callable的返回值捏";}
}

缺点

  • get方法获取值直到线程结束才会继续向下执行,容易阻塞
  • isDone不断轮询会消耗cpu资源

CompletableFuture

优点

  • 回调通知执行结果,不会阻塞
  • 异步执行
  • 可以组合处理多个任务
  • 对计算速度进行选用)

调用静态方法初始化

  • 当不传线程池参数时则自动调用ForkJoinPool线程池。

whenComplete回调方法

  • 当执行结束后自动执行该方法的代码,无需阻塞
  • 参数为BiConsumer<T,E> 代表两个参数无返回值,T代表上一步返回的值,E代表抛出的异常

get和join的区别

  • 二者的作用相同,都是获取CompletableFuture的返回值,但是get需要处理检查型异常,也就是必须抛出或者处理,而join则不用处理。

thenApply和handle(对计算结果进行处理)

相同点

  • 计算结果存在依赖关系,串行化执行,需要上一个返回值来当成参数

不同点

  • 当thenApply中出现异常时后续不再执行
  • 当handler中出现异常时,后续不会受到影响,继续执行

thenAccept(计算结果病并消费、无返回结果)

thenRun、thenAccept、thenApply对比

thenRun和thenRunAsync区别(线程池运行选择)

applyToEither(对计算速度进行选用、谁快用谁)

thenCombine(对计算结果进行合并)

  • 两个CompletionStage任务都完成后、最终能把两个任务的结果一起交给thenCombine来处理

JUC之 completableFuture相关推荐

  1. JUC高级一: CompletableFuture

    JUC高级: CompletableFuture 1. 线程基础知识复习 1.1 JUC四大口诀 高内聚低耦合前提下,封装思想 线程->操作---->资源类 判断.干活.通知 防止虚假唤醒 ...

  2. JUC系列(十一) | Java 8 CompletableFuture 异步编程

    多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去,再浮上来,我想我们会变的不一样 ...

  3. JUC进阶-NO.2 CompletableFuture

    文章目录 ⭐NO.2 CompletableFuture 一. Future和Callable接口 1.Future 2.Callable 二. FutureTask的缺点 1.FutureTask: ...

  4. Java——聊聊JUC中的CompletableFuture

    文章目录: 1.承接Future和FutureTask 2.CompletableFuture四大静态方法 2.1 runAsync(Runnable runnable) 2.2 runAsync(R ...

  5. 【JUC】第六章 Fork/Join 框架、CompletableFuture

    第六章 Fork/Join 框架.CompletableFuture 文章目录 第六章 Fork/Join 框架.CompletableFuture 一.Fork/Join 框架 1.简介 2.For ...

  6. JUC并发编程-CompletableFuture

    CompletableFuture基本介绍 阻塞的方式和异步编程的设计理念相违背,而轮询的方式会消耗无畏的CPU资源.因此,JDK8设计出CompletableFuture 核心的四个静态方法(分为两 ...

  7. 面试高频——JUC并发工具包快速上手(超详细总结)

    目录 一.什么是JUC 二.基本知识 2.1.进程和线程 2.2.Java默认有两个进程 2.3.Java能够开启线程吗? 2.4.并发和并行 2.5.线程的状态 2.6.wait和sleep的区别 ...

  8. juc java_深入理解JUC(java.util.concurrent)

    Concurrent下的核心类 Executor:具有runnable任务的执行者 ExecutorService:一个线程池管理者,实现类有多种,能把runnable,callable提交到线程池中 ...

  9. 多线程总结-JUC中常用的工具类

    本文只记录JUC中较常用到的一些工具类,只是列举其常见的使用方法,至于其实现原理,此处不做说明. CountDownLatch 一个同步工具类,允许一个或多个线程一直等待,直到其他线程运行完成后再执行 ...

最新文章

  1. 「智源论坛·学者报告会」报名: 面向高效推理的深度网络结构设计
  2. 上班请病假还得看AI脸色,10秒钟判别真假,打工人太难了
  3. 普中28335开发攻略_TMS320F28335项目开发记录1_CCS的使用介绍
  4. Vue、React 之间如何实现代码移植?
  5. C++primer 第 3 章 字符串、向量和数组 3.1 命名空间的using声明 3.2标准库类型string
  6. linux 网络块存储,网络存储集群
  7. 洛谷 P1137 旅行计划
  8. 1068. Find More Coins (30)
  9. POJ2115 C Looooops 扩展欧几里德
  10. ARM 中断状态和SVC状态的堆栈切换 (异常)【转】
  11. 税务Ukey如何进行批量开票
  12. OSM PBF 文件格式说明
  13. 2018最新苹果APP上架App Store流程(超详细)
  14. 使用bedtools进行gwas基因注释
  15. 【Steam VR 2.0】3. Skeleton Poser 自定义抓取手势的使用
  16. Half a million dollars is or are a lot of money?
  17. 牛客国庆集训派对Day1 C-Utawarerumono(扩展欧几里得)
  18. 金山发布毒霸V及网镖V新品 坚持高定价策略
  19. vuex vue-router
  20. Go语言sqlx库操作PostgreSQL数据库增删改查

热门文章

  1. 软件工程第一次结对作业unity项目展示
  2. XYNUOJ 天明的智商
  3. 华为哪些手机可以升级到鸿蒙系统,终于来了!华为手机6月可升级到鸿蒙OS系统,什么是华为鸿蒙系统?...
  4. Tom和Jerry来了,Tom和Jerry走了——北漂18年(38)
  5. Linux设备异常断电导致的SD卡损坏的解决方案
  6. Delaunay Triangulation
  7. 深度学习库 caffe使用 源码分析 依赖库分析 caffe glog gflags openBlas prototxt yolo_darknet 转 caffe
  8. 异性员工避免封闭空间独处、单独约饭、肢体接触,万亿级公司竟然这样规定!!!...
  9. wordpress加速插件_12个插件来加速您的WordPress网站
  10. 用Python3爬去今日头像图片