前言

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

java异步接口_Java接口异步调用相关推荐

  1. 列举java接口_Java接口特点列举说明

    1.接口是一个特殊的抽象类,接口中的所有方法都是抽象方法,所有的属性都是静态常量,一个类可以实现多个接口 接口无修饰符和为abstract时,不能包之间调用:public修饰时,可以包之间调用,但是要 ...

  2. java 接口嵌套接口_Java接口嵌套

    在Java语言中,接口可以嵌套在类或其它接口中.由于Java中interface内是不可以嵌套class的,所以接口的嵌套就共有两种方式:class嵌套interface.interface嵌套int ...

  3. java接口_Java接口

    java接口 Interface in java is one of the core concept. Java Interface is core part of java programming ...

  4. javq接口_Java为什么要使用接口_java接口怎么使用

    Java接口是什么 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口 ...

  5. java 异步调用接口_Java接口异步调用

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

  6. java 如何只暴露接口_Java并发异步编程,原来十个接口的活现在只需要一个接口就搞定...

    什么?对你没有听错,也没有看错 ..多线程并发执行任务,取结果归集~~ 不再忧愁-. 引言 先来看一些APP的获取数据,诸如此类,一个页面获取N多个,多达10个左右的一个用户行为数据,比如:点赞数,发 ...

  7. java调用远程 接口_java通过url调用远程接口返回json数据

    java通过url调用远程接口返回json数据,有用户名和密码验证, 转自 https://blog.csdn.net/wanglong1990421/article/details/78815856 ...

  8. 编写Java程序 堆栈的接口_java - 错误:调用实现接口的通用方法时,java.lang.AbstractMethodError - 堆栈内存溢出...

    我正在尝试使用javassist以编程方式创建和编译实现接口的类(在运行时). 每当我调用该动态类的实例时,都会收到以下错误消息: java.lang.AbstractMethodError: Foo ...

  9. java调取对方接口_java中如何调用对方接口

    调用对方http接口步骤:URL url = new URL(path); 1.打开和url之间的连接HttpURLConnection conn = (HttpURLConnection) url. ...

最新文章

  1. Java测试List<Object>根据其某个属性去重俩种方法效率
  2. 编译原理pl/0 c语言版 pl0.h文件
  3. 基本sql语句--入门语句
  4. day20---IO流概述
  5. android面试笔试题详解
  6. html数字什么字体样式,css字体样式属性有哪些?
  7. Linux常用软件包管理工具集合(DPKG,APT(APT-GET),RPM,YUM,DNF)
  8. 《未来世界的幸存者》读书摘录及笔记
  9. css3D旋转立方体
  10. Linux——stack smashing detected
  11. .NET Core 之 七 EF Core(五)
  12. 【C++初阶:STL —— vector】vector的介绍及使用 | 迭代器失效问题 | vector的深度剖析及模拟实现
  13. 【科研数据处理】[基础]类别变量频数分析图表、数值变量分布图表与正态性检验(包含对数正态)
  14. PHP正则过滤处理微信昵称中emoji字符的方法(导出excel)
  15. 什么是土壤电阻率,它如何影响防雷接地
  16. java网络编程技术有哪些_Java网络编程技术
  17. Windows10分屏显示的3种方式
  18. 计算机三级网络技术资料分享
  19. elementui实现上传视频功能+预览
  20. CXM百科 | 解密客户满意指数(CSAT)

热门文章

  1. 《matlab径向基神经网络》底层实现原理(上)
  2. 筷子兄弟 -- 《老男孩》
  3. 骚操作,如何使用 sed 命令从文本文件中删除特定行?
  4. 用机器学习识别不断变化的股市状况—隐马尔可夫模型(HMM)股票指数预测实战
  5. linux卸载veil,Kali Linux下Veil安装与使用的方法
  6. js为标签添加事件的方式和区别
  7. 【Python】爬虫与反爬虫大战
  8. 人报客户端 Securitykey生成问题
  9. 177m²美式轻奢,简约时髦的色调,又不失高雅范儿
  10. selinux 安全上下文