在网上看到了一个比喻,觉得很形象,这里借用一下:
你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你会把你的电话号码告诉他,让他解决之后打电话通知你。回调就是体现在你的同学又反过来拨打你的号码。
结合到前面所分析的,你打电话给你同学就是【you call me】,你同学解决完之后打电话给你就是【i call you back】。
下面再给出一个关于利用回调配合异步调用的很不错的例子,来源于http://kt8668.iteye.com/blog/205739 回调接口:
- public interface CallBack {
-
- public void execute(Object... objects );
- }
消息的发送者:
- public class Local implements CallBack,Runnable{
-
- private Remote remote;
-
-
- private String message;
-
- public Local(Remote remote, String message) {
- super();
- this.remote = remote;
- this.message = message;
- }
-
-
- public void sendMessage()
- {
-
- System.out.println(Thread.currentThread().getName());
-
- Thread thread = new Thread(this);
- thread.start();
-
- System.out.println("Message has been sent by Local~!");
- }
-
-
- public void execute(Object... objects ) {
-
- System.out.println(objects[0]);
-
- System.out.println(Thread.currentThread().getName());
-
- Thread.interrupted();
- }
-
- public static void main(String[] args)
- {
- Local local = new Local(new Remote(),"Hello");
-
- local.sendMessage();
- }
-
- public void run() {
- remote.executeMessage(message, this);
-
- }
- }
消息的接收者:
- public class Remote {
-
-
- public void executeMessage(String msg,CallBack callBack)
- {
-
- for(int i=0;i<1000000000;i++)
- {
-
- }
-
- System.out.println(msg);
- System.out.println("I hava executed the message by Local");
-
- callBack.execute(new String[]{"Nice to meet you~!"});
- }
-
- }
由上面这个例子可见,回调可以作为异步调用的基础来实现异步调用。
深入浅出Java回调机制
原文:http://www.cnblogs.com/abc8023/p/4672775.html