模块的调用
回调
是一种双向的调用模式,即被调用的接口被调用时,也会调用对方的接口,eg:A调用B的某个方法,B执行完后又调用A的某个方法。
⑴调的用途:
一般用于层间协作,上层将函数安装在下层,下层在一定的条件下出发回调,例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。
⑵Java中的回调
C/C++中的回调,被调用函数要告诉调用者自己的指针地址。Java中没有指针,所以不能传递方法的地址,则采用接口回调的方式来实现:把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被调用类实现的接口的方法。
原理:首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象,控制器对象负责检查某个场景是否出现或某个条件是否满足,当满足时,自动调用回调对象的方法。
package com.dong.TestSynchronized;
public class CallbackTest {
public static void main(String[] args) {
manager m = new manager();
m.distribute();
}
}
//员工,也就是控制器,也可以不用接口,直接写类
interface Staff{
void StartWork();
}
//员工执行方法
class StaffA implements Staff{
//将回调类赋值给全局变量,实现引用
Back b = new backImp();
@Override
public void StartWork() {
System.out.println("员工开始工作");
//进行回调
b.callback();
}
}
//回到接口
interface Back{
void callback();
}
//回调接口的实现类
class backImp implements Back{
@Override
public void callback() {
System.out.println("活干完了,打电话通知老板");
}
}
class manager {
Staff staff = new StaffA();
public void distribute() {
staff.StartWork();
}
}
提示:
模块调用的其他方式:
同步调用|异步调用
操作系统中的线程同步,方法同步,都涉及同步的概念,同步即按照顺序的访问资源,对于同步调用,则也是按照顺序的调用方法,等待被调用的方法执行完毕后,在执行本地方法中未完成的部分。
对于异步操作,也是同理,在线程的异步调用中,线程不需要等待,而是让别的线程去执行,只需返回结果,在这个过程中,调用线程可以去做别的事情,异步方法,异步调用也是同样的道理,无需等待。
如有问题,敬请指出,谢谢,与君共勉