java调用回调机制详解调用回调机制详解
主要介绍了java调用回调机制详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
学习价值,需要的朋友们下面随着小编来一起学习学习吧
调用和回调机制调用和回调机制
在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种:
1.同步调用同步调用
同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b(), 一直等待b()方法执行完毕, a()方法继续往下
走. 这种调用方式适用于方法b()执行时间不长的情况, 因为b()方法执行时间一长或者直接阻塞的话, a()方法的余下代码是无法
执行下去的, 这样会造成整个流程的阻塞.
2.异步调用异步调用
异步调用是为了解决同步调用可能出现阻塞, 导致整个流程卡住而产生的一种调用方式. 类A的方法方法a()通过新起线程的方式
调用类B的方法b(), 代码接着直接往下执行, 这样无论方法b()执行时间多久, 都不会阻塞住方法a()的执行. 但是这种方式, 由于方
法a()不等待方法b()的执行完成, 在方法a()需要方法b()执行结果的情况下(视具体业务而定, 有些业务比如启异步线程发个微信
通知、刷新一个缓存这种就没必要), 必须通过一定的方式对方法b()的执行结果进行监听. 在Java中, 可以使用Future+Callable
的方式做到这一点, 具体做法可以参见文章Java多线程21:多线程下其他组件之CyclicBarrier、Callable、Future和FutureTask.
3.回调回调:
如下图所示, 回调是一种双向的调用方式, 其实而言, 回调也有同步和异步之分, 讲解中是同步回调, 第二个例子使用的是异步回
调
回调的思想是:
类A的a()方法调用类B的b()方法
类B的b()方法执行完毕主动调用类A的callback()方法
通俗而言: 就是A类中调用B类中的某个方法C, 然后B类中反过来调用A类中的方法D, D这个方法就叫回调方法, 这样子说你是不
是有点晕晕的, 其实我刚开始也是这样不理解, 看了人家说比较经典的回调方式:
1. class A实现接口CallBack callback——背景1
2. class A中包含一个class B的引用b ——背景2
3. class B有一个参数为callback的方法f(CallBack callback) ——背景3
4. A的对象a调用B的方法 f(CallBack callback) ——A类调用B类的某个方法 C
5. 然后b就可以在f(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法D