Java回调与接口

Posted leaficesun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java回调与接口相关的知识,希望对你有一定的参考价值。

有类A和类B,分别有a();和b();方法。其中a()中会调用b()方法

 1 public class A 
 2 
 3     public void a() 
 4         new B().b();
       a2(); 5 6 7 public void a2() 8 System.out.println("a2 is running"); 9 10
public class B 

    public void b() 
        System.out.println("b is running");
    

如果b()方法的执行时间较短的话,可以不用管其他,这样调用就好。但是,如果执行时间较长的话,a()方法里往下的代码无法继续执行,会一直等待b()方法执行完事。这就是方法的同步调用。
缺点是,一个方法执行时间长或阻塞,会造成整个a()方法的流程阻塞。那么,为解决这个问题,就出现了方法的异步调。

异步调用

 类A的a()方法可以采用另起线程的方式来调用b()方法。

这中方式也会有种问题,如果b()的执行结果不影响a()方法中下面的执行,就这样调用就好,但是,如过下面的代码需要b()返回的结果,则必须通过什么途径对b()方法执行结果进行监听,java中可以通过Future+Callable的方式可以

实现这一点(实现方式稍后解释)。

这里呢,我们可以简单的给A类放一个callBack()函数,来当作回调函数。每次b()方法执行完就会主动调用A类的callBack()方法,这也是一种双重调用。

 1 public class A 
 2 
 3     public void a() 
 4         new B().b(this);
 5     
 6     
 7     public void a2() 
 8         System.out.println("a2 is running");
 9     
10     
11     public void callBack() 
12         System.out.println("callback is running");
13     
14 
1 public class B 
2 
3     public void b(A a) 
4         System.out.println("b is running");
5         //通知A我执行完了
6         a.callBack();
7     
8 

但是以上场景适合于只有A来调用B的b()方法,而也是只通知了A。如果有跟A类一样,都需要调用b()方法,且要实时等待b()的执行结果,怎么办?不可能也N个b(A a); b(C c);等等诸如此类的方法吧,

OK,针对这种需要多态的应用场景,我们的接口自然而然地就要上了。

我们可以把回调这一行为抽象出来,让所有要调用b()方法的类都去实现这个抽象。

未完待续... ...

 

以上是关于Java回调与接口的主要内容,如果未能解决你的问题,请参考以下文章

Java_接口回调与匿名内部类

Java回调函数的理解与实现

给个Java接口回调的例子

有关接口回调的java题,求解。

Java中啥是接口回调?

java基础接口回调的实现