Java异步非阻塞编程的几种方式 国家自然科学基金项目查询

股票资讯    来源:伊敬股票网  作者:佚名

简介:Java异步非阻塞编程的几种方式

首先,从同步Http调用开始

一个非常简单的业务逻辑,其他后端服务提供一个接口,我们需要通过接口调用来获取响应数据。

逆地理界面:通过经纬度获取经纬度所在的省、市、县以及响应的编码;

curl-i"http://xxx?纬度= 31.08966221524924 & ampchannel=amap7a&。near = false & amp经度= 105.13990312814713 " { " ad code ":" 510722 " }服务器端执行,最简单的同步调用方法:

server响应之前,将在以下本机方法上阻止IO:Java . net . socketinputstream # socket read 0:

通过jstack日志,可以发现该线程将始终处于可运行状态:

" main " # 1 PriO = 5 OS _ PriO = 31 tid = 0x 000007 fed 0c 810000 NID = 0x 1003可运行同步最大的问题是线程资源在IO等待过程中没有得到充分利用,这将限制大量IO场景的服务吞吐量。

第二,JDK nio&未来

在JDK 1.5中,JUC提供了未来抽象:

当然不是所有Futures都是这样实现的,比如io.netty.util.concurrent .抽象future是线程轮询的。

这样做的好处是主线程可以不等待IO响应而做别的事情,比如再发送一个IO请求,可以一起返回:

" main " # 1 prio = 5 OS _ prio = 31 tid = 0x 00007 FD 7a 500 b 000 NID = 0xe 03等待条件。主线程在等待结果返回时仍然需要等待,这并不能从根本上解决这个问题。

第三,使用回调回调方法

在第二节中,主线程仍然需要等待得到结果,那么在主线程发送完请求之后,是否可以停止关心这个逻辑,执行其他逻辑呢?您可以使用回调机制。

这样主线程在发起IO后就不再需要关心业务逻辑了。发送请求后,完全可以做其他事情,或者返回线程池进行调度。如果是HttpServer,需要异步Servlet结合Servlet 3.1。

使用Callback模式,从线程模型来看,发现线程资源得到了充分利用,整个过程没有线程阻塞。

第四,回调地狱

回调地狱,当回调线程需要执行下一次IO调用时,此时进入回调地狱模式。

典型的应用场景是,比如通过经纬度获取行政区域的adcode(逆地理界面),然后根据获取的adcode获取当地的天气信息(天气界面)。

在同步编程模型中,几乎不涉及这样的问题。

回调模式的核心缺陷

动词 (verb的缩写)JDK 1.8复杂未来

有什么办法可以解决回调地狱的问题?当然,JDK 1.8提供了完整的未来。先看看它是怎么解决这个问题的。

将反向地理的回调逻辑封装到一个独立的可完成未来中。当异步线程回调时,调用future.complete(T)封装结果。

将天气执行的调用逻辑封装到一个独立的CompletableFuture中。完成后,逻辑同上。

compose,whenComplete输出:

每个IO操作都可以封装成一个独立的CompletableFuture,从而避免回调地狱。

CompletableFuture只有两个属性:

结果:执行结果:未来(结果或框选结果)。栈:操作栈,用于定义这个Future的下一个操作的行为(依赖动作的树栈的顶部)。weatherFuture怎么称呼?

通过堆栈,可以发现它是在reversecodeFuture的时候。复杂(结果),获取的adcode也用作执行以下逻辑的参数。

这样就完美的解决了回调地狱问题,似乎在主逻辑中同步编码。

不及物动词垂直x未来

Vert.x Future广泛应用于Info-Service,也是类似的解决方案,但设计中使用了Handler的概念。

核心执行的逻辑类似:

当然这不是Vertx的全部,当然这是题外话。

七、反应流

异步编程对吞吐量和资源都有好处,但是是否有统一的抽象来解决这样的问题,答案是Reactive Streams。

核心抽象:发布者订阅者处理器订阅。整个包里只有这四个接口,没有实现类。

在JDK 9中,它被封装为一个规范。

一个简单的例子:

VIII。反应堆&:春天5 & ampSpring WebFlux

通量和。单声道的

作者:Developer Assistant _LS

本文为阿里巴巴云原创内容,未经许可不得转载

相关推荐

贷款是什么意思?大家应该明白,债券借贷其实是一种借贷。为什么需要债券借贷业务?有哪些优势?今天就来介绍一下。债券借贷业务所谓债券...
CCB汇款限额CCB银行网上支付每日最高限额1.网上银行支付:单笔交易限额为每天50,000,最高限额为100,000;2.在线...
干洗店的利润有多少?如果一个城市有50万人口,每个人每个月要洗一件衣服,那么每个月要处理50万件衣服。洗衣价格:10?30元,最...
进出口贸易有限公司是指该公司具有进出口权,可以独立经营,不依赖其他外贸公司。它可以被取消,退税等。进出口贸易公司的本质是贸易中介...
目前,上市公司正进入分红实施季节,即将实施2019年年度报告分红计划的股票受到市场主要资金的青睐。4月14日,盐津店实施了201...
日本单方面决定排放核污染水违反国际法,国际社会有权做出法律回应,包括向国际法院或国际海洋法法庭提起诉讼或要求采取临时措施。同时,...
【潜水河韵】扩大消费在于增加居民收入,改革仍然是实现这一点的关键。楚竹生中共中央政治局最近一次会议对下半年的经济工作作出了安排。...
春节后入市买基金的朋友这几天损失很大。盲目入市,以为别人能自己赚钱,简单抄作业,抄的都是持有集团股份的明星基金。如果团股不行,明...
上海有色金属网在官网配股应该避免哪些错误?股票融资的方式很简单。我们可以用少量的本金获得多个基金来赚取更多的利润,也正因为这个巨...
当这个模型被认为是哈佛H4(parameter|picture)的继承者,被命名为“初恋”的时候,我和很多媒体同事的反应是类似的...
各位朋友,不知道你们喜不喜欢那些性能车。事实上,在我们的道路上,我们可以发现性能导向型汽车越来越多。原因很简单,因为现在的人越来...
原标题:越来越多的人不装吸顶灯。现在没有主灯是趋势,亮如白昼,没有死角!最近出了一部日剧《昨日美食》,一个简单的疗伤系统的故事。...
自从智能时代到来,人们的生活发生了巨大的变化。许多高智能的电子产品也出现在人们的生活中,给人们带来惊喜,丰富他们的生活体验。在众...
简介:Java异步非阻塞编程的几种方式首先,从同步Http调用开始一个非常简单的业务逻辑,其他后端服务提供一个接口,我们需要通过...
梁冬新材料股吧工商银行(601398)在股市上有很多优势。如果网上资金划拨平台申请相关服务,整个流程会变得非常简单,放款速度也会...

股票标签

友情链接