java的调用机制主要分为同步调用、异步调用、回调这三种,当然也包括一些其它的,例如异步回调等。
同步调用是我们平常使用比较多的方法,是一种阻塞式调用,即是在一个类A中调用另一个类B中的方法,只有当B中的方法完成后,A才会继续完成其后续的方法;异步调用其实就是实现一个可无需等待调用函数的返回值而让操作继续运行的方法。简单的将就是另外启动一个线程完成调用部分的方法,调用者继续执行自己的方法,之后接收被调用方法的结果即可
一、回调机制及代码实现
回调从字面上也很好理解,即被调用方在被调用时也会调用对方的方法。那么回调的作用是什么呢?它允许我们开发自己的类方法然后集成到框架中去,用来满足个性化的定制需求。
- 在java中实现回调:
- 类A实现接口CallBack (接口函数假设为call())
- 类A中包含成员变量类B的实例
- 类B中有一个含有参数为CallBack callback 的方法f
- a对象调用B的方法f,f又在自己的方法中调用A的方法
要实现上述流程,我们需要定义一个接口,和两个类
接口
public interface CallBack {
void callback();
}
类A(调用方)
public class A implements CallBack {
private B b;
public A(B b) {
this.b = b;
}
@Override
public void callback() {
System.out.println("函数回调");
}
//开启异步调用
public void call(){
new Thread(new Runnable() {
@Override
public void run() {
b.execute(A.this);
}
}).start();
}
public static void main(String[] args) {
B b = new B();
A a = new A(b);
a.call();
}
}
类B
public class B {
public void execute(CallBack callBack){
System.out.println("我是被调用方");
callBack.callback();
}
}
这里是一个异步回调的实现,线程run()也是一个回调方法,当执行Thread的start()方法就会回调这个run()方法。
·
网友评论