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);
}//实现接收员工回复的函数@Overridepublic 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() {@Overridepublic void run() {try {//休眠1sThread.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.结果