java回调函数
回调函数(callback Function),顾名思义就是用来回调的函数。在两个类A、B中,A在调用B接口的同时B也在调用A
回调函数也常用于线程中的异步获取消息。
举个简单的例子,公司中老板分发任务给员工A,让A完成任务一段时间后回复老板,而老板总不能等待A完成任务,期间老板可能还要做其他重要的事情,所以A就可以通过回调通知老板任务完成了
代码例子
1.定义回调接口,内置一个员工回复老板的函数
public interface MyCallback {
public void callback(String massage);
}
2.Boss类,实现回调接口,让员工任务完成后知道要回复的对象
package callback;
public class Boss implements MyCallback{
//老板姓名
private String name = "";
//分配任务的员工对象
Employee employee = null;
public Boss(String name,Employee employee){
this.name = name;
this.employee = employee;
}
//分配任务
public void schedule(){
//this指当前Boss类的对象
employee.work(this,"打电话给技术部小李-"+name);
}
//实现接收员工回复的函数
@Override
public void callback(String massage) {
System.out.println(name+"收到员工"+employee.getName()+"回复:"+massage+" ");
}
}
3.Employee类
package callback;
public class Employee {
//员工姓名
private String name = "";
public Employee(String name){
this.name = name;
}
//接收老板安排的任务
public void work(MyCallback callback,String myWork){
System.out.println("员工"+name+"收到工作消息,工作是:"+myWork);
//创建并开启线程
new Thread(new Runnable() {
@Override
public void run() {
try {
//休眠1s
Thread.sleep(1000);
//回复老板任务完成情况
callback.callback("回复老板工作做完了");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
public String getName() {
return name;
}
}
4.测试类
public class Test {
public static void main(String[] args) {
Boss boss = new Boss("王老板",new Employee("铁蛋"));
//王老板给员工铁蛋布置任务
boss.schedule();
Boss boss1 = new Boss("黎老板",new Employee("狗蛋"));
//黎老板给员工狗蛋布置任务
boss1.schedule();
}
}
5.结果