软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。
- 同步调用:即单向调用,阻塞。A调用B,需要拿到B的结果后才能继续执行,是顺序调用
public class A {
private B b;
public A(B b){
this.b = b;
}
public void ma(){
b.mb();
System.out.println("this is A.ma()");
}
}
public class B {
public void mb(){
System.out.println("this is B.mb()");
}
}
- 异步调用:非阻塞调用。A调用B,不需要拿到B的结果就能继续执行。异步调用通常采用多线程的方法来达到目的。
public class A {
private B b;
public A(B b){
this.b = b;
}
public void ma(){
new Thread(() -> b.mb()).start();
System.out.println("this is A.ma()");
}
}
public class B {
public void mb(){
System.out.println("this is B.mb()");
}
}
- 回调:双向调用。A调用B的方法,同时在B的方法中调用了A的另一个方法
public class A {
private B b;
public A(B b){
this.b = b;
}
public void ma(){
b.mb(this);
System.out.println("this is A.ma()");
}
public void callback(){
System.out.println("this is A.callback()");
}
}
public class B {
public void mb(A a){
a.callback();
System.out.println("this is B.mb()");
}
}
- 异步回调:在回调的基础上异步处理
public class A {
private B b;
public A(B b){
this.b = b;
}
public void ma(){
new Thread(()->b.mb(this)).start();
System.out.println("this is A.ma()");
}
public void callback(){
System.out.println("this is A.callback()");
}
}
public class B {
public void mb(A a){
System.out.println("this is B.mb()");
a.callback();
}
}
网友评论