Java CompletableFuture的complete(7)

先看代码:

        CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {@Overridepublic String get() {try {TimeUnit.SECONDS.sleep(2);} catch (Exception e) {e.printStackTrace();}return "blog.csdn.net/zhangphil";}});System.out.println(System.currentTimeMillis() + ":time 1");future.whenCompleteAsync(new BiConsumer<String, Throwable>() {@Overridepublic void accept(String s, Throwable throwable) {System.out.println(System.currentTimeMillis() + ":" + s);}});System.out.println(System.currentTimeMillis() + ":time 2");new Thread(new Runnable() {@Overridepublic void run() {try {TimeUnit.SECONDS.sleep(3);} catch (Exception e) {//异常退出。future.completeExceptionally(e);}// CompletableFuture被通知线程任务完成。System.out.println(System.currentTimeMillis() + ":运行至此。");future.complete("任务完成。");}}).start();System.out.println(System.currentTimeMillis() + ":time 3");

输出:

06-19 11:25:17.630 15068-15068/zhangphil.test I/System.out: 1529378717630:time 1
06-19 11:25:17.631 15068-15068/zhangphil.test I/System.out: 1529378717631:time 21529378717631:time 3
06-19 11:25:19.638 15068-15094/zhangphil.test I/System.out: 1529378719638:blog.csdn.net/zhangphil
06-19 11:25:20.634 15068-15095/zhangphil.test I/System.out: 1529378720633:运行至此。

可以看到在Thread线程体中的

future.complete("任务完成。");

没有执行,是因为在CompletableFuture.supplyAsync只休息了两秒,就正常执行完毕了,故不再执行complete的代码了。complete用来告知CompletableFuture任务完成。

下面调换sleep时间,让CompletableFuture.supplyAsync休息的长一些,而Thread里面休息短一下:

        CompletableFuture<String> future = CompletableFuture.supplyAsync(new Supplier<String>() {@Overridepublic String get() {try {TimeUnit.SECONDS.sleep(3);} catch (Exception e) {e.printStackTrace();}return "blog.csdn.net/zhangphil";}});System.out.println(System.currentTimeMillis() + ":time 1");future.whenCompleteAsync(new BiConsumer<String, Throwable>() {@Overridepublic void accept(String s, Throwable throwable) {System.out.println(System.currentTimeMillis() + ":" + s);}});System.out.println(System.currentTimeMillis() + ":time 2");new Thread(new Runnable() {@Overridepublic void run() {try {TimeUnit.SECONDS.sleep(2);} catch (Exception e) {//异常退出。future.completeExceptionally(e);}// CompletableFuture被通知线程任务完成。System.out.println(System.currentTimeMillis() + ":运行至此。");future.complete("任务完成。");}}).start();System.out.println(System.currentTimeMillis() + ":time 3");

输出:

06-19 11:32:26.814 16768-16768/zhangphil.test I/System.out: 1529379146814:time 1
06-19 11:32:26.815 16768-16768/zhangphil.test I/System.out: 1529379146815:time 2
06-19 11:32:26.816 16768-16768/zhangphil.test I/System.out: 1529379146816:time 3
06-19 11:32:28.818 16768-16820/zhangphil.test I/System.out: 1529379148818:运行至此。
06-19 11:32:28.822 16768-16854/zhangphil.test I/System.out: 1529379148822:任务完成。

这次没有输出字符串blog.csdn.net/zhangphil了,因为Thread率先执行完成,则直接以complete的结果为准,忽略CompletableFuture.supplyAsync的get计算结果。

Java CompletableFuture的complete(7)相关推荐

  1. 20 个使用 Java CompletableFuture的例子

    转载自 20 个使用 Java CompletableFuture的例子 这篇文章介绍 Java 8 的 CompletionStage API和它的标准库的实现 CompletableFuture. ...

  2. java calendar_Java Calendar complete()方法与示例

    java calendar Calendar类的complete()方法 (Calendar Class complete() method) complete() method is availab ...

  3. Java CompletableFuture.runAfterEither任何一个完成就执行Runnable

    Java CompletableFuture.runAfterEither任何一个完成就执行Runnable 假设两个互不相干的任务A和B,只要任何一个完成就触发执行线程Runnable privat ...

  4. Java CompletableFuture

    2019独角兽企业重金招聘Python工程师标准>>> Future(接口) Future是Java 5添加的类,用来描述一个异步计算的结果. 特点 对于结果的获取不是很方便,只能通 ...

  5. 20个使用 Java CompletableFuture的例子

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 鸟窝 来源 | https://urlify.cn/ay ...

  6. 使用JAVA CompletableFuture实现流水线化的并行处理,深度实践总结

    大家好,又见面啦. 在项目开发中,后端服务对外提供API接口一般都会关注响应时长.但是某些情况下,由于业务规划逻辑的原因,我们的接口可能会是一个聚合信息处理类的处理逻辑,比如我们从多个不同的地方获取数 ...

  7. CompletableFuture 实现异步计算

    在Markdown的语法中,<u>下划线</u>中的文字会被解析器加上下划线,为了不影响阅读,本文中JDK文档涉及到<U>都会替换为<N>,请各位注意. ...

  8. 【异步编程学习笔记】JDK中的FutureTask和CompletableFuture详解(使用示例、源码)

    文章目录 FutureTask概述 使用实例 类图结构 FutureTask的run()方法 FutureTask的局限性 CompletableFuture概述 CompletableFuture代 ...

  9. Java(JavaEE)学习线路图

    Java学习线路图 Java教程 Java 教程 Java 简介 Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java变量类型 Java修饰符 Java运算 ...

最新文章

  1. 利用Trigger完成WPF 的动画-渐显
  2. 前端一HTML:十一:其他选择器
  3. POJ - 3693 Maximum repetition substring(后缀数组+RMQ)
  4. CF1556E-Equilibrium【栈,树状数组】
  5. 【渝粤题库】陕西师范大学202321投资银行学 作业(专升本)
  6. (需求实战_进阶_02)SSM集成RabbitMQ 关键代码讲解、开发、测试
  7. Django账号绑定邮箱时发送链接
  8. 几种常用排序(归并,希尔,快排,堆排.......)
  9. linux操作系统期末考试试题及答案,Linux操作系统期末复习题(含答案).doc
  10. 产品读书《麦肯锡方法》
  11. ADT下载地址(含各版本)
  12. 视频运动放大一:欧拉视频放大,《Eulerian video magnification for revealing subtle changes in the world》
  13. matlab练习程序(RGB2CMY、CMY2RGB)
  14. 有没有比图灵机能力更强的计算模型?
  15. 支付宝证书模式支付接口
  16. 【单片机笔记】运放电流检测实用电路
  17. SQL面试问题及回答
  18. 位操作 、|、~、^、、
  19. 领导说: 抱怨别人和责怪他人 , 都是自己没能力的表现 !
  20. 深度deepin20打印失败“Can’t create temporary file”解决方法

热门文章

  1. 【电信学】【2009.06】基于实验数据的参考MIMO天线构型性能研究
  2. 利用CXF的wsdl2java来建立Web Service. (转载)
  3. 基于java jsp酒神网
  4. surface计算机显示桌面,带你玩转Surface!你应该记住的快捷键大全
  5. 128种chatGPT可以为人类做的事情
  6. PTA 7-9 sdut-String-1 识蛟龙号载人深潜,立科技报国志(1)分数 10
  7. 云胶片(云影像)- 占用资源及费用估算
  8. Monkey测试问题及解决方法
  9. mysql 导入导出数据库
  10. 一篇文带你使用CSS3做出西游记动画