Java CompletableFuture的complete(7)
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)相关推荐
- 20 个使用 Java CompletableFuture的例子
转载自 20 个使用 Java CompletableFuture的例子 这篇文章介绍 Java 8 的 CompletionStage API和它的标准库的实现 CompletableFuture. ...
- java calendar_Java Calendar complete()方法与示例
java calendar Calendar类的complete()方法 (Calendar Class complete() method) complete() method is availab ...
- Java CompletableFuture.runAfterEither任何一个完成就执行Runnable
Java CompletableFuture.runAfterEither任何一个完成就执行Runnable 假设两个互不相干的任务A和B,只要任何一个完成就触发执行线程Runnable privat ...
- Java CompletableFuture
2019独角兽企业重金招聘Python工程师标准>>> Future(接口) Future是Java 5添加的类,用来描述一个异步计算的结果. 特点 对于结果的获取不是很方便,只能通 ...
- 20个使用 Java CompletableFuture的例子
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 鸟窝 来源 | https://urlify.cn/ay ...
- 使用JAVA CompletableFuture实现流水线化的并行处理,深度实践总结
大家好,又见面啦. 在项目开发中,后端服务对外提供API接口一般都会关注响应时长.但是某些情况下,由于业务规划逻辑的原因,我们的接口可能会是一个聚合信息处理类的处理逻辑,比如我们从多个不同的地方获取数 ...
- CompletableFuture 实现异步计算
在Markdown的语法中,<u>下划线</u>中的文字会被解析器加上下划线,为了不影响阅读,本文中JDK文档涉及到<U>都会替换为<N>,请各位注意. ...
- 【异步编程学习笔记】JDK中的FutureTask和CompletableFuture详解(使用示例、源码)
文章目录 FutureTask概述 使用实例 类图结构 FutureTask的run()方法 FutureTask的局限性 CompletableFuture概述 CompletableFuture代 ...
- Java(JavaEE)学习线路图
Java学习线路图 Java教程 Java 教程 Java 简介 Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java变量类型 Java修饰符 Java运算 ...
最新文章
- 利用Trigger完成WPF 的动画-渐显
- 前端一HTML:十一:其他选择器
- POJ - 3693 Maximum repetition substring(后缀数组+RMQ)
- CF1556E-Equilibrium【栈,树状数组】
- 【渝粤题库】陕西师范大学202321投资银行学 作业(专升本)
- (需求实战_进阶_02)SSM集成RabbitMQ 关键代码讲解、开发、测试
- Django账号绑定邮箱时发送链接
- 几种常用排序(归并,希尔,快排,堆排.......)
- linux操作系统期末考试试题及答案,Linux操作系统期末复习题(含答案).doc
- 产品读书《麦肯锡方法》
- ADT下载地址(含各版本)
- 视频运动放大一:欧拉视频放大,《Eulerian video magnification for revealing subtle changes in the world》
- matlab练习程序(RGB2CMY、CMY2RGB)
- 有没有比图灵机能力更强的计算模型?
- 支付宝证书模式支付接口
- 【单片机笔记】运放电流检测实用电路
- SQL面试问题及回答
- 位操作 、|、~、^、、
- 领导说: 抱怨别人和责怪他人 , 都是自己没能力的表现 !
- 深度deepin20打印失败“Can’t create temporary file”解决方法