回调,这个概念不难理解。
某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出办法后打手机通知我,这样,我就挂掉电话办其它事情去了。过了XX分钟,我的手机响了,你兴高采烈的说问题已经搞定,应该如此这般处理。故事到此结束。这个例子说明了“异步+回调”的编程模式。其中,你后来打手机告诉我结果便是一个“回调”过程;我的手机号码必须在以前告诉你,这便是注册回调函数;我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。
通过上面个人感觉到回调更多的应用就是结合异步。比如:Ajax中js通过组件和服务器的异步通信。
public class A {
public CallInterface callInterface;
public A(CallInterface callInterface) {
this.callInterface = callInterface;
}
public void call() {
this.callInterface.method();
}
}
我还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口:
public interface CallInterface
{
public void method();
}
于是,程序员B只需要实现这个接口就能达到回调的目的了:
public class B implements CallInterface {
@Override
public void method() {
System.out.println("回调方法");
}
public static void main(String args[]) {
A a = new A(new B() {
public void method() {
System.out.println("电话通了,B告诉A,大笨熊其实是北极熊不是黑熊。");
}
});
a.call();
}
}
显示结果是:电话通了,B告诉A,大笨熊其实是北极熊不是黑熊。
采用回调函数,让线程通知主程序何时结束,它通过调用主程序中的一个方法来实现。 (线程就是在该主类中启动的) ,这就称为回调,因为线程在结束的时候,调用其创建者。这样主程序就可以在线程运行的时候休息,而不会占用线程的时间。
回调函数在线程和主类中传递信息