java 异步调用接口_Java接口异步调用[通俗易懂]

java 异步调用接口_Java接口异步调用[通俗易懂]java接口调用从调用方式上可以分为3类:同步调用,异步调用,回调;同步调用基本不用说了,它是一种阻塞式的调用,就是A方法中直接调用方法B,从上往下依次执行。今天来说说异步调用。什么是异步调用?我的理解就是在方法A中调用方法B,但是方法B很耗时,如果是同步调用的话会等方法B执行完成后才往下执行,如果异步的话就是我调用了方法B,它给我个返回值证明它已接受调用,但是它并没有完成任务,而我就继续往下执行…

大家好,又见面了,我是你们的朋友全栈君。

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

什么是异步调用?

我的理解就是在方法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模拟的异步操作.链接中还有后续改进操作,但本文只想阐述什么是异步调用,所以不加以展示,有兴趣的可以访问该链接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157331.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月11日 上午8:46
下一篇 2022年7月11日 上午9:00


相关推荐

  • centos7.6安装docker_docker 生产环境

    centos7.6安装docker_docker 生产环境前言前面一篇学了mac安装docker,这篇来学习在linux上安装docker环境准备Docker支持以下的CentOS版本,目前,CentOS仅发行版本中的内核支持Docker。Doc

    2022年7月30日
    6
  • psping|端口连通性测试工具

    psping|端口连通性测试工具为了测试 TCP 端口的连通性 例如测试 RDP SSH 端口可用性 或者 HTTP HTTPS 服务稳定性 通常使用 PsPing 或者 PaPing PsPing 是微软 PSTools 工具套件中的其中一个命令 除了 ICMPping 测试 它主要用来测试 TCP 端口的连通性 还可以测试 TCP UDP 网络时延和带宽 不过 PsPing 只能在 Windows 中运行 如果您需要在 Linux

    2026年3月16日
    2
  • android读取短信_android发短信代码

    android读取短信_android发短信代码在Tasker中利用短信的通知实现短信内容转发到微信之前的教程是利用Tasker自带的短信变量来实现的,这有一个无法解决问题:在360,魅族,坚果等品牌的手机中无法获取短信的消息内容。利用短信的通知则可以获取短信的内容,并且对于华为手机来说也可以不用关闭短信验证码保护功能,所以相较于原来的方法更简单,方便。应用通知的变量是一个本地数组变量%evtprm(),这个变量数组包含%evtprm…

    2022年10月13日
    3
  • 字符串匹配之KMP—全力解析

    字符串匹配之KMP—全力解析

    2021年11月29日
    43
  • TCP长连接数据传输(同步方式)[通俗易懂]

    TCP长连接数据传输(同步方式)

    2022年2月13日
    56
  • python中的main函数_matlab脚本中定义函数

    python中的main函数_matlab脚本中定义函数许多编程语言都有一个特殊的函数,当操作系统开始运行程序时会自动执行该函数。这个函数通常被命名为main(),并且依据语言标准具有特定的返回类型和参数。另一方面,Python解释器从文件顶部开始执行脚本,并且没有自动执行的特殊函数。尽管如此,为程序的执行定义一个起始点有助于理解程序是如何运行的。Python程序员提出了几种方式对此进行实现。本文结束时,您将了解以下内容:什么是特殊的__n…

    2022年4月20日
    71

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号