java 异步等待_Java中的异步等待

java 异步等待

编写异步代码很困难。 试图了解异步代码应该做什么的难度更大。 承诺是尝试描述延迟执行流程的一种常见方式:首先做一件事,然后再做另一件事,以防万一出错时再做其他事情。

在许多语言中,承诺已成为协调异步行为的实际方法。 Java 8终于有了该程序,并引入了CompletableFuture; 尽管很认真,但谁设计了API? 一团糟

许诺的麻烦在于,控制流程可能变得非常简单。 随着控制流程变得越来越复杂,几乎变得难以理解(执行此操作,然后,除非是星期三,否则执行另一件事,如果有错误,请返回三个空格,yada yada yada)。

很酷的孩子们已经开始使用异步…等待。 C#拥有它。 JavaScript有它。 现在……现在,通过EA的一些大才能,Java拥有了它! 是的,Java具有可用的async ... await构造,无需更改语言!

一个简单的例子:我们可以使用CompletableFuture编写几个异步操作,如下所示:

private static void theOldWay() {doAThing().thenCompose(Main::doAnotherThing).thenAccept(Main::reportSuccess).exceptionally(Main::reportFailure);
}

这应该很简单,通常使用期货代码与这个简单代码相去甚远。 但是,借助EA异步等待的魔力,我们可以像这样重新编写它:

private static CompletableFuture<Void> theNewWay() {try {String intermediate = await(doAThing());String result = await(doAnotherThing(intermediate));reportSuccess(result);} catch (Throwable t) {reportFailure(t);}return completedFuture(null);
}

看起来像同步代码。 但是对Async.await的调用是神奇的。 这些调用将被重写(在运行时或构建时,如您所愿),以使调用无阻塞!

该代码更容易编写,更容易阅读,更容易调试一百万倍,最重要的是它可以自然扩展。 随着代码变得越来越复杂,您可以使用常规的重构工具来控制它。 使用CompletableFutures,您最终会绕过所有这些将来的对象,并且在某个地方,有一天您会错过代码路径和繁荣! 生产中的一个免费错误。

因此,即使您坚持使用Java,也仍然可以像酷孩子一样使用async…await!

翻译自: https://www.javacodegeeks.com/2018/02/async-await-java.html

java 异步等待

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

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

相关文章

cass生成曲线要素_干货在线 | CASS入门指南——道路断面计算土方

CASS操作指南——道路断面计算土方法小伙伴们赶紧学起来&#xff01;道路类的土方工程&#xff0c;主要用CASS的断面法土方计算之道路断面来计算。整个计算过程主要分为以下四步&#xff1a;菜单截图第一步&#xff1a;绘制道路中心线道路的中心线&#xff0c;一般由直线段和缓…

正则表达式的捕获性分组/反向引用

文章目录分组捕获性分组和反向引用分组 正则的分组主要通过小括号来实现&#xff0c;括号包裹的子表达式作为一个分组&#xff0c;括号后可以紧跟限定词表示重复次数。如下&#xff0c;小括号内包裹的 abc 便是一个分组: // (abc) 表示匹配一个或多个"abc"&#xf…

深度学习pytorch--多层感知机(二)

多层感知机的从零开始实现获取和读取数据定义模型参数定义激活函数定义模型定义损失函数训练模型小结我们已经从上一节里了解了多层感知机的原理。下面&#xff0c;我们一起来动手实现一个多层感知机。首先导入实现所需的包或模块。 import torch import numpy as np获取和读取…

jwt同一会话_在会话中使用JWT

jwt同一会话这个话题已经在黑客新闻&#xff0c;reddit和博客上讨论了很多次。 共识是–请勿使用JWT&#xff08;用于用户会话&#xff09;。 而且我在很大程度上同意对JWT的典型论点 &#xff0c; 典型的“但我可以使其工作……”的解释以及JWT标准的缺陷的批评 。 。 我不会…

表必须要有主键吗_玄关隔断什么材质好?玄关隔断必须要做吗?

为了避免一到门口就能够看到全部室内的东西&#xff0c;为了更好的保护家居的隐私&#xff0c;目前有很多人都会在玄关的位置加一个隔断&#xff0c;而玄关隔断什么材质好?在做玄关隔断的时候&#xff0c;有些人觉得做了隔断会太浪费空间了&#xff0c;而玄关隔断必须要做吗?…

深度学习pytorch--多层感知机(三)

使用pytorch框架实现多层感知机和实现softmax回归唯一的不同在于我们多加了一个全连接层作为隐藏层。它的隐藏单元个数为256&#xff0c;并使用ReLU函数作为激活函数。#模型的核心代码为:nn.Linear(num_inputs, num_hiddens),nn.ReLU(),nn.Linear(num_hiddens, num_outputs),

mysql 日期索引的使用_日期使用

mysql 日期索引的使用时区糟透了。 特别是夏令时。 我不介意像与此行为相关的编程错误那样&#xff0c;不停移动时钟或失去一个小时的睡眠。 更糟糕的是Java的旧日期/时间API。 Java社区通过JSR 310公开承认了这一点&#xff0c;该JSR 310代替了Java Date&#xff06;Time API…

axure元件库 文件上传_手把手教你打造一套属于产品经理自己的元件库

之前有篇文章聊完了如何打造一套属于自己的原型图设计规范&#xff0c;今天咱们来聊聊如何打造一套属于自己的元件库。毕竟&#xff0c;每个追求效率的PM&#xff0c;总会拥有一个专属自己的Axure元件库&#xff0c;并不断打磨优化。今天就教大家一步一步创建属于自己的Axure元…

KMP算法笔记

1.KMP算法本质上就是对朴素匹配算法(BF)的一个优化&#xff0c;减少朴素匹配算法中不必要匹配的次数&#xff0c;核心代码和朴素匹配算法差不多&#xff0c;BF是移动字串逐个字符匹配&#xff0c;每次模式串(子串)匹配只移动一个字符单位&#xff0c;而KMP算法是每次模式串匹配…

正则表达式的非捕获性分组

非捕获性分组&#xff0c;通常由一对括号加上 ?: 加上子表达式组成&#xff0c;非捕获性分组不会创建反向引用&#xff0c;就好像没有括号一样。如下: var color "#808080"; var output color.replace(/#(?:\d)/,"$1""~~"); console.log(Re…

Spring Security并发会话控制示例教程–如何限制Java JEE Web应用程序中的用户会话数...

如果您不知道&#xff0c; Spring安全性可能会限制用户可以拥有的会话数。 如果要开发Web应用程序&#xff0c;尤其是Java JEE中的安全Web应用程序 &#xff0c;则必须提出与在线银行门户相似的要求&#xff0c;例如&#xff0c; 每个用户一次只能有一个会话&#xff0c;或者每…

prometheus命令_Prometheus 入门

学习安装 Prometheus 监控和警报系统并编写它的查询。-- Michael Zamot(作者)Prometheus 是一个开源的监控和警报系统&#xff0c;它直接从目标主机上运行的代理程序中抓取指标&#xff0c;并将收集的样本集中存储在其服务器上。也可以使用像 collectd_exporter 这样的插件推送…

正则表达式的命名分组

语法格式&#xff1a;(?<name>…) 命名分组也是捕获性分组&#xff0c;它将匹配的字符串捕获到一个组名称或编号名称中&#xff0c;在获得匹配结果后&#xff0c;可通过分组名进行获取。 如下是一个python的命名分组的例子&#xff1a; import re data "#80808…

python--字符/文本编码解码笔记

字符/文本编码解码笔记1.字符问题编码和解码2.字节概要3.基本的编解码器编码类型史字符编码ASCII码GB2312以及其他编码UNICODE标准编码UTF-8编码4.了解编解码问题处理UnicodeEncoderError解决方法:处理UnicodeDecodeError解决方法5.修改源代码编码6.查看文件编码方式终端查看文…

neo4j cypher_Neo4j:Cypher – Neo.ClientError.Statement.TypeError:不知道如何添加Double和String...

neo4j cypher最近&#xff0c;我将支持Neo4j的应用程序从Neo4j 3.2升级到Neo4j 3.3&#xff0c;发现围绕类型强制的行为发生了有趣的变化&#xff0c;导致我的应用程序抛出了很多错误。 在Neo4j 3.2和更早版本中&#xff0c;如果将String添加到Double&#xff0c;它将把Double…

easyui数据表格显示复选框_【Excel技巧】使用控件一键切换实现单位元和万元随意显示...

工欲善其事&#xff0c;必先利其器。职场上亦是如此。Excel报表想要做得完美&#xff0c;首先肯定Excel要精通。做一份Excel报表&#xff0c;如果涉及到金额&#xff0c;当金额比较大&#xff0c;单位到底是用元还是万元&#xff0c;经常是大家纠结的一个问题。我们今天就来介绍…

正则表达式的固化分组

固化分组&#xff0c;又叫原子组。 语法格式&#xff1a;(?>…) 我们在使用非贪婪模式时&#xff0c;匹配过程中可能会进行多次的回溯&#xff0c;回溯越多&#xff0c;正则表达式的运行效率就越低。而固化分组就是用来减少回溯次数的。 实际上&#xff0c;固化分组 (?…

Requests库基本使用

requests库基本使用基本流程python中一个基于网络请求的模块&#xff0c;功能强大&#xff0c;简单便捷&#xff0c;效率极高&#xff0c;可以取代古老的urllib模块。作用&#xff1a;模拟浏览器向服务器发起请求。基本流程 1.指定URL2.对指定的URL发起请求(get或post)3.获取响…

tls 使用java生成_同时使用传入和传出连接时,相互TLS身份验证存在Java问题

tls 使用java生成在大多数企业环境中&#xff0c;应用程序之间的连接中使用某种形式的安全通信&#xff08;例如TLS或SSL&#xff09;。 在某些环境中&#xff0c; 相互&#xff08;双向&#xff09;身份验证也是一项非功能性要求。 有时将其称为双向SSL或双向TLS身份验证。 因…

正则表达式的环视实际应用案例

一、千位分隔符案例&#xff08;一&#xff09; 逆序环视和顺序环视结合应用。 **需求&#xff1a;**数字格式化成用 , 分隔的货币格式。 正则表达式&#xff1a;(?n)(?<\d)(?<!\.\d*)(?(\d{3})(\.|$)) 测试代码&#xff1a; double[] data new double[] { 0,…