java的回调
回调的本质:A类a方法调用B类的b方法,b方法再调用A类的c方法。
举个例子:
现在领导要员工A做一件事,给他发布了任务,需要员工A做完后通知再领导。
对于领导来说:发布任务(fabuTask),获得结果(result)
对于员工来说:处理任务(doSomthing),通知领导结果(result)
代码实现:
/**
* 回调的方法
*
*/
public interface CallBack {
void result(String result);
}
领导发布的任务:让员工做事
/**
* 领导发布任务、获得结果
*
*/
public class Manager implements CallBack{
@Override
public void result(String result) {
System.out.println(result);
}
public void fabuTask(EmployeeInterfce employee) throws InterruptedException {
System.out.println("领导发布任务");
employee.doSomthing(new Manager());
}
}
员工处理事情,需要接收一个CallBack参数,这样才能知道要向谁反馈
/**
* 员工做事、通知领导
*
*/
public class Employee implements EmployeeInterfce{
@Override
public void doSomthing(CallBack callBack) {
String result = "做完了";
callBack.result(result);
}
}
public class Test {
public static void main(String[] args) throws InterruptedException {
Employee employee = new Employee();
Manager manager = new Manager();
manager.fabuTask(employee);
System.out.println("领导继续做事");
}
}
以上就是这一个流程的代码实现,结果:
看结果可以看的,这是一个同步调用,领导收到反馈的结果后再接着做别的。
那领导手上还有别的事呢,领导发布任务后继续做自己的事,只需要员工做完之后通知就行了,下面改一下代码。
/**
* 领导发布任务、获得结果
*
*/
public class Manager implements CallBack{
@Override
public void result(String result) {
System.out.println(result);
}
public void fabuTask(EmployeeInterfce employee) throws InterruptedException {
System.out.println("领导发布任务");
new Thread(new Runnable() {
@Override
public void run() {
employee.doSomthing(new Manager());
}
}).start();
}
}
其他代码不用改,看一下运行结果:
可以看到,领导在发布玩任务后,就不用管员工是否做完就可以接着做自己的事,这种就是异步调用 。