如何在Java项目中异步调用接口

今天就跟大家聊聊有关如何在Java项目中异步调用接口,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联建站是专业的昌邑网站建设公司,昌邑接单;提供成都做网站、网站制作、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行昌邑网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

什么是异步调用?

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

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

异步调用就是你 喊 你朋友吃饭 ,你朋友说知道了 ,待会忙完去找你 ,你就去做别的了。
同步调用就是你 喊 你朋友吃饭 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了 ,你们一起去。

异步调用有哪些角色?

  • 调用者

  • 取货凭证

  • 真实数据

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

异步调用的例子

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

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

看完上述内容,你们对如何在Java项目中异步调用接口有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


网站标题:如何在Java项目中异步调用接口
网页链接:http://scyanting.com/article/jjggoi.html