CompletableFuture详解~completeExpectionally

完成计算异常

现在我们来看一下异步操作如何显式地返回异常,用来指示计算失败。我们简化这个例子,操作处理一个字符串,把它转换成答谢,我们模拟延迟一秒。

我们使用thenApplyAsync(Function, Executor)方法,第一个参数传入大写函数, executor是一个delayed executor,在执行前会延迟一秒。

static void completeExceptionallyExample() {CompletableFuture cf = CompletableFuture.completedFuture("message").thenApplyAsync(String::toUpperCase,CompletableFuture.delayedExecutor(1, TimeUnit.SECONDS));CompletableFuture exceptionHandler = cf.handle((s, th) -> { return (th != null) ? "message upon cancel" : ""; });cf.completeExceptionally(new RuntimeException("completed exceptionally"));assertTrue("Was not completed exceptionally", cf.isCompletedExceptionally());try {cf.join();fail("Should have thrown an exception");} catch(CompletionException ex) { // just for testingassertEquals("completed exceptionally", ex.getCause().getMessage());}assertEquals("message upon cancel", exceptionHandler.join());
}

让我们看一下细节。

首先我们创建了一个CompletableFuture, 完成后返回一个字符串message,接着我们调用thenApplyAsync方法,它返回一个CompletableFuture。这个方法在第一个函数完成后,异步地应用转大写字母函数。

这个例子还演示了如何通过delayedExecutor(timeout, timeUnit)延迟执行一个异步任务。

我们创建了一个分离的handler阶段:exceptionHandler, 它处理异常异常,在异常情况下返回message upon cancel

下一步我们显式地用异常完成第二个阶段。在阶段上调用join方法,它会执行大写转换,然后抛出CompletionException(正常的join会等待1秒,然后得到大写的字符串。不过我们的例子还没等它执行就完成了异常), 然后它触发了handler阶段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/495855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全面超越 Appium,使用 Airtest 超快速开发 App 爬虫

From:https://segmentfault.com/a/1190000017982620 https://www.kingname.info/2019/01/19/use-airtest 在 Airtest 中如何正确使用无线模式控制手机:https://juejin.im/post/5c4f12b0e51d453f45614bbb 使用 python poco 夜神模拟器 进行 自动化测…

Nature:“解构”母爱

来源:生物360一篇论文报告称,小鼠下丘脑视前区相当于一个集成中心,汇集育儿行为相关的大量信息。具体而言,研究人员发现视前区表达甘丙肽的神经元会协调育儿行为的运动、动机、激素和社会因素。相关成果近日 发表 于《自然》。育儿…

CompletableFuture详解~cancel

取消计算 和完成异常类似,我们可以调用cancel(boolean mayInterruptIfRunning)取消计算。对于CompletableFuture类,布尔参数并没有被使用,这是因为它并没有使用中断去取消操作,相反,cancel等价于completeExceptionall…

重磅!不止是芯片!半导体全产业链分析

来源:杨明辉电子(ID:gh_e6a65dbbbff9)作者:光大电子团队周期性波动向上,市场规模超4000亿美元半导体是电子产品的核心,信息产业的基石。半导体行业因具有下游应用广泛、生产技术工序多、产品种类…

adb(Android debug bridge)命令

From:https://www.cnblogs.com/huanyou/p/5133737.html ADB 用法大全: github 地址:https://github.com/mzlogin/awesome-adb adb 官网链接( 国内想访问,你懂得!!! )&am…

CompletableFuture详解~applyToEither

在两个完成的阶段其中之一上应用函数 下面的例子创建了CompletableFuture, applyToEither处理两个阶段, 在其中之一上应用函数(包保证哪一个被执行)。本例中的两个阶段一个是应用大写转换在原始的字符串上, 另一个阶段是应用小些转换。 static void ap…

Win技巧

1、批量重命名文件 a.进入dos执行 dir *.* /b>temp.bat b.打开temp.bat复制内容到Excel的A1和B1单元格 c.把B2改成相应文件名 d.在C1输入公式:"ren "&A1&" "&B1 把C列剩下的都格式 e.复制C列内容覆盖temp.bat执行即可。 转载于:…

预计2024年全球医疗AI市场超100亿美元

来源:新浪医药摘要:随着人们对这些技术所带来的好处日益了解,AI在医疗领域的应用正越来越广泛,例如药物研发和医学影像学等方面。高昂的初始资本需求和维护维修费用以及AI可能扰乱行业并导致大规模失业的担忧,阻碍了AI…

CompletableFuture详解~acceptEither

在两个完成的阶段其中之一上调用消费函数 和前一个例子很类似了,只不过我们调用的是消费者函数 (Function变成Consumer): static void acceptEitherExample() {String original "Message";StringBuilder result new StringBuilder();CompletableFutur…

分享自己写的一个贪吃蛇的游戏(Linux)

作者: dave_cn 发表于 2010-07-18 21:20 原文链接 阅读: 148 评论: 2转载请注明出处。http://www.cnblogs.com/dave_cn/本程序需要ncurses库,ubuntu下安装ncurses可以执行下面命令:sudo apt-get install libncurses5-dev 关于ncurses的用法,读…

Linux 的 diff 命令

读懂 diff:http://www.ruanyifeng.com/blog/2012/08/how_to_read_diff.html 菜鸟教程:https://www.runoob.com/linux/linux-comm-diff.html diff 命令详解:https://www.cnblogs.com/wf-linux/p/9488257.htmlhttp://man.linuxde.net/diffhttp…

机器人大潮中暗藏多少伪命题

来源:中国青年报摘要:伴随着巨大的产业浪潮,一种担忧在人群中弥漫,即机器人的“步伐”如此之快,未来究竟会否抢走人类的饭碗,和人类之间爆发一场就业战争,进而夺走人类的一切?2018 R…

CompletableFuture详解~runAfterBoth

这个例子演示了依赖的CompletableFuture如果等待两个阶段完成后执行了一个Runnable。注意下面所有的阶段都是同步执行的,第一个阶段执行大写转换,第二个阶段执行小写转换 static void runAfterBothExample() {String original "Message";Str…

哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?

原文来源:arXiv作者:Samuel G. Finlayson、Isaac S. Kohane、Andrew L. Beam「雷克世界」编译:EVA对抗样本的发现引起了人们对深度学习系统的实际部署的关注。在本文中,我们认为,就货币激励和技术脆弱性(mo…

Git 详解 和 廖雪峰 Git 教程

转载:廖雪峰 git 教程:https://www.liaoxuefeng.com/wiki/896043488029600 GitHub 秘籍:https://github.com/tiimgreen/github-cheat-sheet/blob/master/README.zh-cn.md Git Community Book 中文版:http://gitbook.liuhui998.c…

ASP.NET MVC: 构建不带 Web 窗体的 Web 应用程序(转载)

我 从事专业开发迄今为止已有 15 年,在此之前,我利用业余时间从事开发至少也有 10 年了。与我这一代的大多数人一样,我是从 8 位计算机起步,然后转用 PC 平台的。随着计算机的复杂性日益增加,我编写的应用程序涵盖了从…

CompletableFuture详解~thenAcceptBoth

使用BiConsumer处理两个阶段的结果 上面的例子还可以通过BiConsumer来实现: static void thenAcceptBothExample() {String original "Message";StringBuilder result new StringBuilder();CompletableFuture.completedFuture(original).thenApply(String::toUpp…

2018人工智能前沿报告:深度学习的应用和价值

来源: 199IT互联网数据中心摘要:报告重点强调了前沿AI技术的应用范围之广,以及经济潜力之盛,也提到了发展中的一些局限和挑战。报告包含400个应用案例,横跨19个行业的9种业务功能。报告重点强调了前沿AI技术的应用范围…

CompletableFuture详解~thenCombine

使用BiFunction处理两个阶段的结果 如果CompletableFuture依赖两个前面阶段的结果, 它复合两个阶段的结果再返回一个结果,我们就可以使用thenCombine()函数。整个流水线是同步的,所以getNow()会得到最终的结果,它把大写和小写字符…

PDB

PDB Program Database是目前最新的Debug信息格式。目前为此已经出现了两个版本,一个是用于Visual studio6.0的PDB20,另一个是用于Visual studio.Net(2002 or 2003)的PDB70。然后后者并不会兼容前者,所以visual studio6.0将不能使用最新的PDB7…