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();		
	}
}

其他代码不用改,看一下运行结果:

可以看到,领导在发布玩任务后,就不用管员工是否做完就可以接着做自己的事,这种就是异步调用 。