所谓回调:就是A类中调用B类中的某个方法M1,然后B类中反过来调用A类中的方法M2,M2这个方法就叫回调方法。实际在使用的时候,也会有不同的回调形式,这里主要讲一下异步回调形式。

  • Class A实现接口CallBack callback——背景1
  • class A中包含一个class B的引用b ——背景2
  • class B有一个参数为callback的方法m(CallBack callback) ——背景3
  • A的对象a调用B的方法 m(CallBack callback) ——A类调用B类的某个方法M1
  • 然后b就可以在m(CallBack callback)方法中调用A的方法 ——B类调用A类的某个方法M2

举个列子:

小梁GG和小祝MM在同一家公司上班,今天是情人节,小梁GG晚上下班想请小祝MM一起吃饭,但是小祝MM手头上还有很多事情没有忙完,如果下班之前不能弄完,晚上就要加班了,就没有时间了,她需要到下班的时候才能回复。到了快下班的时候,小祝MM手头上的事情完成了,晚上不用加班了,就马上给小梁GG打电话告诉他晚上可以一起吃饭了。

package com.cmh.mq.thread.AsynCallback;/*** 这是回调接口* * @author CMH** @param <T>*/
public interface CallBack{void reply(String message);
}
package com.cmh.mq.thread.AsynCallback;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;/*** 这是小梁GG* * @author CMH**/
public class Liang implements CallBack {private static Log logger = LogFactory.getLog(Liang.class);/*** 小祝MM*/private Zhu zhu;public Liang(Zhu zhu) {super();this.zhu = zhu;}/*** 小梁GG邀约小祝MM晚上一起吃饭* * @param invitation*/public void invite(final String invitation) {logger.info("小梁GG正在给小祝MM打电话邀请她晚上一起吃饭");// 线程(异步)new Thread(new Runnable() {@Overridepublic void run() {/*** Liang调用Zhu的方法*/zhu.excuteMessage(Liang.this, invitation);}}).start();logger.info("小梁GG已经邀请完成,等待小祝最后回复");// 约完之后,小梁GG继续上班play();}private void play() {System.out.println("小梁GG继续上班");}@Overridepublic void reply(String message) {System.out.println("来自小祝MM的回复:" + message);}}
package com.cmh.mq.thread.AsynCallback;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;/*** 这是小祝MM* * @author CMH**/
public class Zhu {private static Log logger = LogFactory.getLog(Zhu.class);public void excuteMessage(CallBack callBack, String message) {logger.info("来自小梁GG的邀约:" + message);// 模拟小祝MM办自己的事情try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();}// 打电话告诉小梁GGcallBack.reply("小祝晚上有时间");}}

测试类

package com.cmh.mq.thread.test;import org.junit.Test;import com.cmh.mq.thread.AsynCallback.Liang;
import com.cmh.mq.thread.AsynCallback.Zhu;/*** 测试类* * @author CMH**/
public class AsynCallBackTest {@Testpublic void callBackTest() {// 创建一个小祝MMZhu zhu = new Zhu();// 创建一个小梁GGLiang liang = new Liang(zhu);// 小梁GG邀请小祝MM晚上吃饭liang.invite("晚上有时间吗?我请你吃饭");}}

java异步回调讲解相关推荐

  1. Java 异步回调机制实例解析

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调是一种特殊 ...

  2. java异步回调历程

    java I/O的经历了BIO(Blocking IO),NIO(Non-blocking IO),AIO(Async-I/O),这些IO技术的发展都是依托已java版本的更新. 本文主要研究一下ja ...

  3. java filter 回调_Java 异步回调机制实例分析

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

  4. c++ 异步回调_知道Java中的回调机制吗?

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

  5. callback函数_小程序不同页面的异步回调,callback和promise的使用讲解

    发个扫盲贴,大神请绕道.最近好多同学问我如何再请求数据成功后直接使用数据.我们通常的做法就是在请求成功后,再调用我们定义的方法,进而使用数据.如下代码 onLoad() {let that=thisw ...

  6. java线程callback,Java线程之异步回调(Callback)

    ●介绍 有时候执行一个任务需要很长时间,单线程下线程会处于阻塞状态.这个时候我们会考虑一种非阻塞的处理模式.非阻塞任务在任何编程语言里都必不可少,Java也不例外.多线程就是一个很好的解决办法. 但是 ...

  7. java异步多线程 判断线程状态_java多线程和异步回调

    在实际开发过程中遇到的多线程情况不多,但是在生产环境中多线程是最基本的情况,java面试时也会考到,所以看看多线程的知识还是很有必要的. Thread,Runnable,Callable,Future ...

  8. java 中的异步回调

    异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图: 先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作 ...

  9. Java接口回调,异步回调理解

    文章目录 前言 一.回调简单理解 二.Java中用接口实现回调 1.实现接口回调 1.1同步回调 1.2 异步回调 2.为啥要用接口实现 3.关于接口(基础) 总结 前言 本文是作者在学习接口回调时看 ...

最新文章

  1. JLOI2011 飞行路线
  2. 不知道这 7 大 OpenCV 函数怎么向计算机视觉专家进阶?
  3. Crawler:基于BeautifulSoup库+requests库+伪装浏览器的方式实现爬取14年所有的福彩网页的福彩3D相关信息,并将其保存到Excel表格中
  4. ionic + cordova 配置和开发过程中的一些问题
  5. 微软亚太区资料科学总监:R 语言是 VS 生态第一顺位
  6. lambda 使用_如何使用Lambda和API网关构建API
  7. ORACLE 查询所有用户调度作业
  8. linux ntp server配置文件,Linux下配置ntp server
  9. datagrid中动态显示或隐藏某一列的方法(根据条件判断显示和隐藏)
  10. mysql调查问卷_mysql – 解密数据库ER图用于问卷调查
  11. 手机app测试方法(一)基本流程
  12. 怎样更改itunes备份位置_iTunes备份路径在哪?iTunes备份路径如何修改
  13. java常用的编辑器之kindeditor
  14. Youtube是什么平台?有什么用?能同时登录吗?
  15. Linux CreateRepo创建Repomd (xml-rpm-metadata)存储库
  16. 解决黑苹果和Windows双系统时,时钟不同步的问题
  17. mysql主从配置duxi_做Mysql主从时,注意使用replicate_wild_do_table和replicate-wild-ignore-table...
  18. unicode转中文 中文转unicode的简单方式
  19. KaTex各种语法汇总
  20. 区块链存在哪些安全缺陷?怎么解决?

热门文章

  1. Windows截图工具合集
  2. Oracle数据同步解决方案之databus
  3. 网站ICP备案是什么意思?和公安备案有什么区别?
  4. SQL Server数据库实操 第二波 集合查询、datepart()
  5. 公众号榜单 | 2020·7月公众号原创排行榜重磅发布
  6. 车牌识别系统四:Pyqt5编写简易车牌识别界面
  7. 高端大气上档次的网站
  8. 程序员客栈统计:2021年中国程序员薪资和生活现状调查报告
  9. 关于淘宝的数据库系统【转】
  10. 世界是由什么组成的java_世界是由什么组成的?