本文转载自http://hellosure.iteye.com/blog/1130176

在网上看到了一个比喻,觉得很形象,这里借用一下:
你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以解决这个问题,但是需要一些时间,那么你不可能一直拿着电话在那里等,你会把你的电话号码告诉他,让他解决之后打电话通知你。回调就是体现在你的同学又反过来拨打你的号码。
结合到前面所分析的,你打电话给你同学就是【you call me】,你同学解决完之后打电话给你就是【i call you back】。

下面再给出一个关于利用回调配合异步调用的很不错的例子,来源于http://kt8668.iteye.com/blog/205739 回调接口:

  1. public interface CallBack {
  2. /**
  3. * 执行回调方法
  4. * @param objects   将处理后的结果作为参数返回给回调方法
  5. */
  6. public void execute(Object... objects );
  7. }

消息的发送者:

  1. /**
  2. * 这个类相当于你自己
  3. */
  4. public class Local implements CallBack,Runnable{
  5. private Remote remote;
  6. /**
  7. * 发送出去的消息
  8. */
  9. private String message;
  10. public Local(Remote remote, String message) {
  11. super();
  12. this.remote = remote;
  13. this.message = message;
  14. }
  15. /**
  16. * 发送消息
  17. */
  18. public void sendMessage()
  19. {
  20. /**当前线程的名称**/
  21. System.out.println(Thread.currentThread().getName());
  22. /**创建一个新的线程发送消息**/
  23. Thread thread = new Thread(this);
  24. thread.start();
  25. /**当前线程继续执行**/
  26. System.out.println("Message has been sent by Local~!");
  27. }
  28. /**
  29. * 发送消息后的回调函数
  30. */
  31. public void execute(Object... objects ) {
  32. /**打印返回的消息**/
  33. System.out.println(objects[0]);
  34. /**打印发送消息的线程名称**/
  35. System.out.println(Thread.currentThread().getName());
  36. /**中断发送消息的线程**/
  37. Thread.interrupted();
  38. }
  39. public static void main(String[] args)
  40. {
  41. Local local = new Local(new Remote(),"Hello");
  42. local.sendMessage();
  43. }
  44. public void run() {
  45. remote.executeMessage(message, this);  //这相当于给同学打电话,打完电话之后,这个线程就可以去做其他事情了,只不过等到你的同学打回电话给你的时候你要做出响应
  46. }
  47. }

消息的接收者:

  1. /**
  2. * 这个类相当于你的同学
  3. */
  4. public class Remote {
  5. /**
  6. * 处理消息
  7. * @param msg   接收的消息
  8. * @param callBack  回调函数处理类
  9. */
  10. public void executeMessage(String msg,CallBack callBack)
  11. {
  12. /**模拟远程类正在处理其他事情,可能需要花费许多时间**/
  13. for(int i=0;i<1000000000;i++)
  14. {
  15. }
  16. /**处理完其他事情,现在来处理消息**/
  17. System.out.println(msg);
  18. System.out.println("I hava executed the message by Local");
  19. /**执行回调**/
  20. callBack.execute(new String[]{"Nice to meet you~!"});  //这相当于同学执行完之后打电话给你
  21. }
  22. }

由上面这个例子可见,回调可以作为异步调用的基础来实现异步调用。

深入浅出Java回调机制的更多相关文章

  1. 基础知识《十三》深入浅出Java回调机制

    本文转载自http://hellosure.iteye.com/blog/1130176 在网上看到了一个比喻,觉得很形象,这里借用一下: 你有一个复杂的问题解决不了,打电话给你的同学,你的同学说可以 ...

  2. java回调机制及其实现(转)

    1. 什么是回调函数 回调函数,顾名思义,用于回调的函数.回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数.回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机.回调 ...

  3. Java回调机制总结

    调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...

  4. 转:一个经典例子让你彻彻底底理解java回调机制

    一个经典例子让你彻彻底底理解java回调机制 转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273 ...

  5. 深入浅出: Java回调机制(异步)

    一.什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调 ...

  6. JAVA回调机制(CallBack)详解

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  7. JAVA回调机制解析

    一.回调机制概述     回调机制在JAVA代码中一直遇到,但之前不懂其原理,几乎都是绕着走.俗话说做不愿意做的事情叫做突破,故诞生了该文章,算是新年的新气象,新突破!     回调机制是什么?其实回 ...

  8. JAVA 回调机制(callback)

    序言 最近学习java,接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回 ...

  9. 浅谈Java回调机制

    像许多网上介绍回调机制的文章一样,我这里也以一个现实的例子开头:假设你公司的总经理出差前需要你帮他办件事情,这件事情你需要花些时间去做,这时候总经理肯定不能守着你做完再出差吧,于是就他告诉你他的手机号 ...

随机推荐

  1. HashSet与HashMap的区别

    本文由 ImportNew - 唐小娟 翻译自 Javarevisited.欢迎加入翻译小组.转载请见文末要求. HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到C ...

  2. mssql手工注入

    判断注入点: 1.数字型 http://www.targer.com/article.aspx?id=1 http://www.targer.com/article.aspx?id=1' http:/ ...

  3. 防SQL注入代码(ASP版)

    <% Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份 头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向页面, ...

  4. Why you shouldn't use Entity Framework with Transactions

    Links EntityFramework This is a .net ORM Mapper Framework from Microsoft to help you talking with yo ...

  5. Java多线程编程核心技术---线程间通信(一)

    线程是操作系统中独立的个体,但这些个体如果不经过特殊处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一.线程间通信可以使系统之间的交互性更强大,在大大提高CPU利用率的同时还会使程序员对各 ...

  6. Thinkphp 整理备忘 杂记

    1:输出变量函数  (手册目录:控制器-输出变量) I('变量类型.变量名',['默认值'],['过滤方法'],['额外数据源']) 例:$title = I('post.title','','str ...

  7. 多线程 GET

    iOS中多线程的实现 方案 简介 语言 线程生命周期 使用频率 pthread 一套通用的多线程API 适用于 Unix / Linux / Windows 等系统 跨平台\可移植 使用难度大 C 程 ...

  8. dwz 多选删除

    <li><a title="确实要删除这些用户吗?" target="selectedTodo" postType="string& ...

  9. 我常用的eclipse快捷键

    重写父类方法:右键点击, 进source,进override/implement 单行注释(或多行注释) Ctrl+/ 文档注释:shift+alt+J 整块注释: Ctrl+shift+/ 取消整块 ...

  10. http request method and response codes

    ============================ HTTP_Method============================ HTTP Method Action Examples GET ...