Java回调机制的学习(CallBack)

深入浅出的理解Java回调机制(一个有趣的小例子):

http://www.cnblogs.com/heshuchao/p/5376298.html

Java同步调用,异步调用,回调(参考)

https://www.cnblogs.com/xrq730/p/6424471.html

 

总结

Java回调:

Class A可以完成一个功能,而其他的Class想要用Class A的那个功能并得到处理后的结果(每个Class对得到结果的后续操作不同)

这个时候Class A就可以定义一个回调接口,并且接收这个回调接口

其他的类要用Class A的功能的时候只要定义一个内部类实现该接口(对结果的后续操作),再拿着该接口去调用A的功能就可以了

Class A在功能执行完毕之后,就会把结果传给回调接口的回调方法中并执行回调方法

 

P.s.对于简单的业务逻辑没必要用回调,直接用调用就行了(调用Class A的功能并得到结果,然后自己处理结果)

 

接口的常见三种实现

一种是类implements接口,然后覆写抽象方法(回调方法)

(这种最简单就懒得放代码了)

一种是在方法的参数中匿名内部类覆写抽象方法

 iLoginModel.getLogin(new OnNetListener() {
        @Override
        public void onSuccess(Exception e) {
        //这里覆写方法,具体的实现代码
    }
});

一种是内部类implements接口,覆写抽象方法

(这种和第一种同样的道理,只不过类中添加了一个内部类来实现接口,操作的时候用这个内部类)

 

同步调用

Java回调机制的学习(CallBack)_第1张图片

同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),b()执行完毕返回结果给a(),a()方法继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞。

 

异步调用

Java回调机制的学习(CallBack)_第2张图片

异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式。类A的方法方法a()通过新起线程的方式调用类B的方法b(),代码接着直接往下执行,这样无论方法b()执行时间多久,都不会阻塞住方法a()的执行。但是这种方式,由于方法a()不等待方法b()的执行完成,在方法a()需要方法b()执行结果的情况下(视具体业务而定,有些业务比如启异步线程发个微信通知、刷新一个缓存这种就没必要),必须通过一定的方式对方法b()的执行结果进行监听。在Java中,可以使用Future+Callable的方式做到这一点,具体做法可以参见博主的这篇文章Java多线程21:多线程下其他组件之CyclicBarrier、Callable、Future和FutureTask。

 

你可能感兴趣的:(Java概念)