这段时间学习java的回调机制,在网上包括博客寻找了许多关于回调的一些文章和文献,最终自己尝试着理解和写了一些回调的实现用作学习理解,话不多说,直接上主菜。(本人新人入坑,只是阐述了自己的理解与实现,欢迎大家交流批评~)

回调我这里说两种,一个是同步回调,一个是异步回调。(文章最后有图解,听说代码和图片在一起更配哦~)

同步回调(代码是写给有恒心之人)

这里我先把同步回调代码贴出来

情景;小明和小芳在聊天,小明问小芳在做什么,小芳马上回答了后,小明便说收到了

这里先定义了一个接口

public interface CallBackInterface {public void execute();
}

然后实现小明的类,他实现了上面的接口。

public class XiaoMing implements CallBackInterface{public XiaoMing(){System.out.println("小芳在做啥?");}public void execute() {  System.out.println("收到了!!" );  }
}

然后定义小芳的类

public class XiaoFang {private CallBackInterface callback;public XiaoFang(){}public XiaoFang(CallBackInterface callback){this.callback = callback;}public void doSome(){  System.out.println("我刚才去洗碗了!");  //I can call you backcallback.execute();  }
}

最后便是做场景的main方法啦

public class MainC {public static void main(String[] args){System.out.println("单线程同步回调");XiaoMing xiaoming = new XiaoMing();XiaoFang x2 = new XiaoFang(xiaoming);x2.doSome();}
}

运行结果;

单线程同步回调
小芳在做啥?
我刚才去洗碗了!
收到了!!

让我们来捋一捋思路,小明的实现的callback接口就像是一个可供回话的电话号码,小明在主方法中先实例化了自己(问小芳在做啥),并在其中留下了一个回话的方法(当然小明是不可能知道小芳会讲什么的 )。然后小芳实例化了自己,并把小明的问题和回话方法拿到并做出了回应(“我刚才去洗碗了”),然后打电话(callback.execute()),小明这时便收到了消息(我收到了)。这个例子中不难看到回调的身影,小明a->小芳b->小明a的回答。

再来看看异步回调。

情景;小明问小芳在做啥,然后小明便出门了,小明留下了一台可供收消息的留言机,小芳过了一会才收到消息并回复。

上代码

还是先定义一个callback接口

public interface CallBack {public void result();
}

然后是小明的方法

public class XiaoMing implements CallBack{public XiaoMing(){System.out.println("小芳在做啥?");}public void result() {System.out.println("小明回答;收到!");}}

小芳

public class XiaoFang implements Runnable{  public CallBack callback;  public XiaoFang (CallBack callback){                                                                                                  this.callback = callback;  }  public void run() {  try {  Thread.sleep(3000);  } catch (InterruptedException e) {  e.printStackTrace();  }  System.out.println("过了两秒小芳才回答");   System.out.println("我去喝奶茶了");         callback.result();                              }
}  

然后便是主场景MainA

public class MainA {public static void main(String[] args){XiaoMing x = new XiaoMing();XiaoFang xiaofang = new XiaoFang(x);new Thread(xiaofang).start();System.out.println("小明问完就出门买东西了");}}

运行结果;

小芳在做啥?
小明问完就出门买东西了
过了两秒小芳才回答
我去喝奶茶了
小明回答;收到!

可以看到,异步回调与同步回调并没有太大的区别,唯一的区别便是小芳这次没有马上回答,而是等了一会才回了消息(新开线程),但是回调的实现还是基本一模一样的,还是小明a->小芳b(等待后)->小明a的回答。

当然了,多线程回调的实际开发我觉得可能更多用在网络请求中。

最后,不多解释,上图!

没错这就是回调的流程图解,

1,首先两个对象都实现了callback接口,对象A(小明)在他其中实现了callback具体要做的事 ;

2,然后对象B(小芳),会取得对象A(小明的)传入的callback,也就是this.callback = callback ;

3,这时,对象B(小芳)执行的便是对象A(小明)实现的接口callback的方法啦(“收到了”)!

    是不是很眼熟,对了你想的没错,就是android的点击事件,我们平时写的匿名onclicklistener就是我们的小明,而小芳就是我们用的控件(你可以在button源码里发现this.onclicklisten = onclicklisten ~ . ~)。具体的实际运用大家就自己去研究拉~(如果你觉得这篇文章值得一读,那希望读者大人们能为作者点个赞哦~)

同步回调与异步回调的实现与学习相关推荐

  1. 关于js的回调函数,同步回调与异步回调

    回调定义 刚开始学习javascript时,对回调函数的理解仅仅停留在知道定义阶段.什么是回调函数? 就是将一个函数作为参数传递给另一个函数,作为参数的这个函数就是回调函数. 至于为什么要用到回调函数 ...

  2. C++屌屌的观察者模式-同步回调和异步回调

    目录 一.概述 1.同步观察者 2.异步观察者 二.效果展示 三.同步观察者 四.异步观察者 五.相关文章 原文链接:C++屌屌的观察者模式-同步回调和异步回调 一.概述 说起观察者模式,也是比较简单 ...

  3. 理解支付宝同步回调和异步回调

    支付宝同步回调和异步回调 当一个支付请求被发送到支付渠道方,支付渠道会很快返回一个结果.但是这个结果,只是告诉你调用成功了,不是扣款成功,这叫同步调用. 很多新手会拿这个结果 当作支付成功了,那就会被 ...

  4. Java回调函数异步回调案例

    1.回调函数分类 回调函数区分:同步回调和异步回调 同步回调:意义只在于完成方法调用: 异步调用:可实现并发,主业务线程可以及时释放:异步线程完成工作,执行回调函数,完成善后工作:提高了执行效率. 2 ...

  5. 回调函数 相当于线程_C++屌屌的观察者模式-同步回调和异步回调

    一.概述 说起观察者模式,也是比较简单的一种模式了,稍微工作有1年经验的同学,写起来都是666... 想看观察者模式的说明可以直接上菜鸟教程|观察者模式这个地址去看. 本篇文章其实就是一个简单的观察者 ...

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

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

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

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

  8. 【Promise】入门-同步回调-异步回调-JS中的异常error处理-Promis的理解和使用-基本使用-链式调用-七个关键问题

    文章目录 1. 预备知识 1.1 实例对象与函数对象 1.2 两种类型的回调函数 1. 同步回调 2. 异步回调 1.3 JS中的异常error处理 1. 错误的类型 2. 错误处理(捕获与抛出) 3 ...

  9. 回调函数 同步回调 异步回调

    回调函数 回调函数一般是在封装接口的时候,回调显得特别重要,我们首先假设有两个程序员在写代码,A程序员写底层驱动接口,B程序员写上层应用程序,然而此时底层驱动接口A有一个数据d需要传输给B,此时有两种 ...

  10. 接入了一个比较冷萌的第三方环迅h5网关支付,发起订单以及同步/异步回调(文档中也有官方微信支付宝接入代码资源哦)

    虽然之前对于接入第三方支付有比较多的经验,但是这次接入环迅h5支付还是花了2天半的时间才整入到项目中,遇到了一个坑耽搁了一天半,下面讲一下接入注意事项 可能大家一般都是接入微信支付宝等官方支付(微信支 ...

最新文章

  1. React多页面应用脚手架-v1.3.0
  2. 学python好不好-开课吧的python课程怎么样,值得报名吗?
  3. 深入理解分布式技术 - 消息队列知识点回顾总结
  4. python3界面实例_程序人生——python3下tkinter的界面示例
  5. 全选和全不选(管理员列表)----html文件
  6. cocos2d-x 中创建 CCSprite 精灵动画
  7. Go语言基础进阶—程序结构—包和文件
  8. [Android]EditText属性详解
  9. 非名校毕业,如何在六天面试六家顶尖科技公司,并拿到全部Offer?
  10. new,malloc,GlobalAlloc详解
  11. Cocos2d-xJson数据解析(读取和写入)
  12. Windows操作系统安全配置缺陷自动检测技术
  13. 信天翁水域雷达监视系统
  14. Vcpkg 的安装与使用
  15. 计算机组装与维护致谢,浅谈计算机组装与维护的教学改革-毕业论文致谢
  16. 埃特金方法c语言,C语言通用范例开发金典(含光盘1张)
  17. 产生伪随机数两种常用算法
  18. 线性动态规划-文件排版
  19. RNA-Seq质控工具RseQC安装使用
  20. 运维的一些日常知识点

热门文章

  1. 我不是教你诈 内容摘要
  2. 基于AR眼镜有哪类功能可实现?
  3. 【重构学习】02 何处重构?
  4. WGL中的Scan信息的解析
  5. 同步或者重构Activiti Identify用户数据的多种方案比较
  6. 舒淇放下黎明战胜抑郁 自称没责任感且不会结婚q1h
  7. 书单推荐2020-07-06
  8. Hi3559AV100 RTSP推H265视频码流使用VLC软件本地直播
  9. 黑苹果主机z77技嘉wifi主板,
  10. [ur_driver-2] process has died