Java接口异步调用

网友投稿 364 2023-01-06


Java接口异步调用

前言

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

什么是异步调用?

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

再用一个生活中的例子吧:

异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。

同步调用就是你 喊 你朋友吃饭 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了 ,你们一起去。

异步调用有哪些角色?

调用者

取货凭证

真实数据

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

异步调用的例子

连结调用者和真实数据之间的桥梁是取货凭证.我们先来看它的实现:

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模拟的异步操作。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:关于app系统接口设计与实现的信息
下一篇:如何实现接口自动化(什么叫接口自动化)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~