java 异步调用接口_Java接口异步调用[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。
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.cn/157331.html原文链接:https://javaforall.cn
相关文章
- 用Java IO流实现下载文件
- java xml解析框架_JAVA解析xml的五种方式对比
- java编写一个学生类和教师类,Java创建一个学生类[通俗易懂]
- java怎么用_如何使用Java编写程序
- java环境_Java 开发环境配置
- java一个字符几个字节_Java 语言中一个字符占几个字节?
- 【说站】Java对象在内存中的结构
- mybatis返回两个字段数据_java接口接收json数据
- Java-监听器
- R.java was modified manually Reverting to generated version
- 【JAVA】接口和抽象类有什么区别?
- java状态机的一种优雅写法
- Myeclipse建立第一个java web程序详解程序员
- Java 继承Thread类和实现Runnable接口的区别详解编程语言
- Java调用支付宝支付接口详解编程语言
- java 支付宝 接口开发详解编程语言
- RSA加密和数字签名在Java中常见应用【原创】详解编程语言
- Linux上部署Java项目实践指南(linux部署java项目)
- 客户端建立Redis集群:Java客户端指南(redis集群java)
- 使用Java实现Redis数据存储(redis集成java)
- 时间设置利用Redis实现Java缓存过期时间设置(redisjava过期)
- Linux下Java命令:简介与基本用法(linux下java命令)