转载:http://blog.csdn.net/xiaanming/article/details/8703708/
这一片文章对异步回调和同步回调解析的很生动,可以看一下。
回调主要作用在多线程当中,对于单线程来讲没有多大作用,不知道我这样理解对不对,求大神指点。
首先写我们的回调接口类:
CallBack.java
public interface CallBack <T>{ public void callback(T t); }
然后写我们进行的耗时操作,通过多线程完成
ConnectionGet.java
public class ConnectionGet { /** * 去进行联网的耗时操作,例如下载啊,post,get请求等等 */ public void execute(final CallBack<HashMap<String, String>> callback){ new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); //模拟联网的耗时操作2秒钟 } catch (InterruptedException e) { e.printStackTrace(); } HashMap<String,String> m = new HashMap<String, String>(); m.put("k", "v"); callback.callback(m); } }).start(); }
}
测试类
Test.java
public class Test{ /** * @param args */ public static void main(String[] args) { ConnectionGet connectionGet = new ConnectionGet();
/**匿名内部类处理回调**/ connectionGet.execute(new CallBack<HashMap<String,String>>() { @Override public void callback(HashMap<String, String> t) { if(null!=t&&t.size()>0){ System.out.println("maink"+t.get("k")); } } }); }
}
当然,为了更深入的理解那句:
所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法
可以将Test.java改成
public class Test implements CallBack<HashMap<String,String>>{ public static void main(String[] args) { ConnectionGet connectionGet = new ConnectionGet();
connectionGet.execute(new Test());
}
@Override public void callback(HashMap<String, String> t) { if(null!=t&&t.size()>0){ System.out.println("maink"+t.get("k")); } }
}
可以将Test类看成是A类,ConnectionGet类看成是B类,execute方法为B类C方法,实现的callback即为A类D方法
好了,,个人理解就到这儿,有什么问题或者我的理解有误求指出。
共同进步!!!