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的功能并得到结果,然后自己处理结果)

同步调用

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

异步调用

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

猜你喜欢

转载自blog.csdn.net/yh18668197127/article/details/85122677
今日推荐