资讯专栏INFORMATION COLUMN

Java接口异步调用

denson / 1097人阅读

摘要:接口调用从调用方式上可以分为类同步调用,异步调用,回调同步调用基本不用说了,它是一种阻塞式的调用,就是方法中直接调用方法,从上往下依次执行。今天来说说异步调用。

java接口调用从调用方式上可以分为3类:同步调用,异步调用,回调;同步调用基本不用说了,它是一种阻塞式的调用,就是A方法中直接调用方法B,从上往下依次执行。今天来说说异步调用。

什么是异步调用?

我的理解就是在方法A中调用方法B,但是方法B很耗时,如果是同步调用的话会等方法B执行完成后才往下执行,如果异步的话就是我调用了方法B,它给我个返回值证明它已接受调用,但是它并没有完成任务,而我就继续往下执行。可能有表达不当的地方,欢迎指正。

再用一个生活中的例子吧:
异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。
同步调用就是你 喊 你朋友吃饭 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了 ,你们一起去。

异步调用有哪些角色?

调用者

取货凭证

真实数据

一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据.

异步调用的例子(以下取自http://blog.csdn.net/dlutbruc...)

连结调用者和真实数据之间的桥梁是取货凭证.我们先来看它的实现:
public class FutureTicket{
private Object data = null;
private boolean completed = false;

public synchronized void makeRealData(){
if(this.complited) return;
//获取数据的耗时操作.这里用Sleep代替
try{
Thread.sleep(10000);
}catch(Throwable t){}
this.data = "返回的数据内容";
this.completed = true;
notifyAll();
}

public synchronized Object getData(){
while(!this.completed)){
try{

wait();  

}catch(Throwable t){}
}
return this.data;

}
public boolean isCompleted(){
return this.completed;
}
}
为了简单化说明(不把它们的关系开得复杂),这里用Objectb代替了真实数据.而真实的实现中我们应该把makeData放在一个真实数据的类中,然后提供一个方法返回真实数据.这样对于真实数据的处理和取货凭证解耦.

对于这个取货凭证,调用者的如何调用是异步调用的关键:
publc class Requester{
public FutureTicket request(){
final FutureTicket ft = new FutureTicket();

//在新线程中调用耗时操作
new Thread(){
public void run(){

ft.makeRealData();  

}
}.start();
return ft;
}
}
在新线程中启动耗时操作后,不等待线程的完成立即返回提货单.

然后调用者可以根据ft.isCompleted()来调用getData()获取真实数据.当然对ft.isCompleted()测试可以按规定时间间隔轮巡(极低级的方案),也可以在条件不满足时wait(),然后等待makeData的notifyAll();这样你就完成了一个用JAVA模拟的异步操作.链接中还有后续改进操作,但本文只想阐述什么是异步调用,所以不加以展示,有兴趣的可以访问该链接。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67739.html

相关文章

  • Java 8原生API也可以开发响应式代码?

    摘要:中使用了提供的原生接口对自身的异步化做了改进。可以支持和两种调用方式。实战通过下面的例子,可以看出的最大好处特性。 showImg(https://segmentfault.com/img/remote/1460000020032427?w=1240&h=655); 前段时间工作上比较忙,这篇文章一直没来得及写,本文是阅读《Java8实战》的时候,了解到Java 8里已经提供了一个异步...

    HtmlCssJs 评论0 收藏0
  • java接口回调理解

    摘要:下面说的是接口回调的理解,比较常用什么是回调函数有些库函数要求应用先传给它一个函数,在合适的时候调用,以完成目标任务。 接口回调机制 网上有一篇挺形象的例子 https://www.cnblogs.com/heshu... java中的回调我认为分为,同步回调,异步回调回调:其实就是,A调用B,B也调用A,同步回调:就是一种阻塞调用,A调用B的方法,等待B执行完,A才继续异步回调:类...

    Rainie 评论0 收藏0
  • Java回调机制解读

    摘要:异步调用异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式。回调是一种思想是一种机制,至于具体如何实现,如何通过代码将回调实现得优雅实现得可扩展性比较高,一看开发者的个人水平,二看开发者对业务的理解程度。 模块间调用在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 showImg(https://segmen...

    Hancock_Xu 评论0 收藏0
  • Thrift 简易入门与实战

    摘要:简介是一个软件框架用来进行可扩展且跨语言的服务的开发它结合了功能强大的软件堆栈和代码生成引擎以构建在这些编程语言间无缝结合的高效的服务官网地址安装的安装比较简单在下可以直接使用快速安装或可以通过官网下载这里就不再多说了当下载安装完毕后我们就 简介 thrift是一个软件框架, 用来进行可扩展且跨语言的服务的开发. 它结合了功能强大的软件堆栈和代码生成引擎, 以构建在 C++, Java...

    iliyaku 评论0 收藏0
  • java回调函数-异步回调-简明讲解

    摘要:回调函数异步回调简明讲解叙言异步回调常用于某些业务需要很长时间处理,但是又需要立刻返回结果,这种情况都需要开辟线程独立处理需要长时间多的业务,也无处理完了,回调回调函数,再去处理与之有关的需要在该业务之后处理的业务。 java回调函数-异步回调-简明讲解 叙言: 异步回调常用于某些业务需要很长时间处理,但是又需要立刻返回结果,这种情况都需要开辟线程独立处理需要长时间多的业务,也无处理...

    Simon_Zhou 评论0 收藏0

发表评论

0条评论

denson

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<