java 回调的原理与实现
回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。
回调原本应该是一个非常简单的概念,但是可能因为平时只用系统为我们写好的回调的接口了,自己很少实现回调,所以在自己实现回调的时候还是有一点点晕的,现在写这篇文章记录一下,也和大家分享一下怎么写回调接口。
回调
回调的概念:举个例子就是,我们想要问别人一道题,我们把题跟对方说了一下,对方说好,等我做完这道题,我就告诉你,这个时候就用到了回调,因为我们并不知道对方什么时候会做完,而是对方做完了来主动找我们。
同步回调
代码运行到某一个位置的时候,如果遇到了需要回调的代码,会在这里等待,等待回调结果返回后再继续执行。
异步回调
代码执行到需要回调的代码的时候,并不会停下来,而是继续执行,当然可能过一会回调的结果会返回回来。
总体的代码还是很简单的,就是模拟了一个打印机,还有一个人,打印机具有打印的功能,但是打印需要时间,不能在收到任务的同时给出反馈,需要等待一段时间才能给出反馈。
这个人想做的就是打印一份简历,然后知道打印的结果。这里面代码实现了这两种方式。
具体代码:
Callback.java
public interface Callback {void printFinished(String msg);
}
Printer.java
public class Printer {public void print(Callback callback) {System.out.println("正在打印 . . . ");try {Thread.currentThread();Thread.sleep(3000);// 毫秒} catch (Exception e) {e.printStackTrace();}callback.printFinished("打印完成");}
}
People.java
public class People {Printer printer = new Printer();/** 同步回调*/public void goToPrintSyn(Callback callback) {printer.print(callback);}/** 异步回调*/public void goToPrintASyn(Callback callback) {new Thread(new Runnable() {public void run() {printer.print(callback);}}).start();}
}
Main.java 测试类,同步回调
public class Main {// 测试类,同步回调public static void main(String[] args) {People people = new People();Callback callback = new Callback() {@Overridepublic void printFinished(String msg) {System.out.println("打印机告诉我的消息是 ---> " + msg);}};System.out.println("需要打印的内容是 ---> " + "打印一份简历");people.goToPrintSyn(callback);System.out.println("我在等待 打印机 给我反馈");}
}
需要打印的内容是 ---> 打印一份简历
正在打印 . . .
打印机告诉我的消息是 ---> 打印完成
我在等待 打印机 给我反馈
Main.java 测试类,异步回调
public class Main {// 测试类,异步回调public static void main(String[] args) {People people = new People();Callback callback = new Callback() {@Overridepublic void printFinished(String msg) {System.out.println("打印机告诉我的消息是 ---> " + msg);}};System.out.println("需要打印的内容是 ---> " + "打印一份简历");people.goToPrintASyn(callback);System.out.println("我在等待 打印机 给我反馈");}
}
需要打印的内容是 ---> 打印一份简历
我在等待 打印机 给我反馈
正在打印 . . .
打印机告诉我的消息是 ---> 打印完成
java 回调的原理与实现相关推荐
- 【Android】Java回调原理并结合Android源码进行理解
回调机制是一种常见的设计模式,它把工作流内的某个功能按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据. 之前对于回调一直是一知半解,而且总是停留在C++的函数指针的理解之 ...
- 关于Java“回调”的详细理解及使用
本文由"言念小文"原创,转载请说明文章出处 一.前言 接触java快六年了,从事软件开发工作也三年多了.感谢那些知名或不知名的大神一篇篇精彩博文,帮助我 从一个开发小白一步步成长为 ...
- 10分钟看懂, Java NIO 底层原理
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:硬刚一周,3W字总结,一年的经验告诉你如何准备校招! 个人原创100W+访问量博客:点击前往,查看更多 写在前面 ...
- Java NIO 底层原理详解
写在前面 很多的小伙伴,被java IO 模型,搞得有点儿晕,一会儿是4种模型,一会儿又变成了5种模型. 很多的小伙伴,也被nio这个名词搞晕了,一会儿java 的nio 不叫 非阻塞io,一会儿ja ...
- Java回调函数理解和应用
#Java回调函数理解和应用 所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的. 在未理解之前,我也是一脸懵逼,等我理 ...
- Java 动态代理原理图解 (附:2种实现方式详细对比)
动态代理在 Java 中有着广泛的应用,例如:Spring AOP 面向切面编程,Hibernate 数据查询.以及 RPC Dubbo 远程调用等,都有非常多的实际应用@mikechen 目录 Ja ...
- 10分钟看懂 Java NIO 底层原理
写在前面 很多的小伙伴,被java IO 模型,搞得有点儿晕,一会儿是4种模型,一会儿又变成了5种模型. 很多的小伙伴,也被nio这个名词搞晕了,一会儿java 的nio 不叫 非阻塞io,一会儿ja ...
- java lock的原理,Java中Lock原理探究
在对于lock锁的使用上,很多人只是掌握了最基础的方法,但是对实现的过程不是很清楚.这里我们对lock锁功能的实现进行分析,以ReentrantLock为例,分析它的锁类型,并对相关的调用方法进行展示 ...
- Java并发编程原理与实战六:主线程等待子线程解决方案
Java并发编程原理与实战六:主线程等待子线程解决方案 参考文章: (1)Java并发编程原理与实战六:主线程等待子线程解决方案 (2)https://www.cnblogs.com/pony1223 ...
最新文章
- seaborn使用violinplot函数可视化分组小提琴图(Grouped Violinplot with Seaborn violinplot)并保存可视化结果
- 对typedef void (*sighandler_t)(int)的理解(声明了一种类型:sighandler_t)
- Swiper使用心得
- HTML5网页APP连接MQTT,使用js连接mqtt
- 深入理解C# 3.x的新特性(2):Extension Method[下篇]
- 当动物保护用上AI……
- JS进阶篇--JS数组reduce()方法详解及高级技巧 1
- 欢迎使用CSDN-markdown编辑器--样例
- 跨域的小小总结:js跨域及跨域的几种解决方法
- Bug人生---初看windows核心编程有感
- Java初学练手,一款汽车车牌号生成小工具
- 全国三级流域空间分布矢量数据下载方式
- mysql reconnect_在设置了MYSQL_OPT_RECONNECT之后,mysql_ping是否还有必要?
- 【Zotero】使用坚果云同步PC端和IOS端
- 【UE4】UE4框选
- 天天向上的力量---python持续的力量
- 字节跳动2019届校招笔试题
- PHP 可以利用的危险的函数
- 使用cmd命令窗口打开对应的应用程序
- 芯科发布EFR32BG22芯片,强劲性能对比TI芯片CC2640R2F和CC2640R2L
热门文章
- 百度2021年武汉高考成绩查询,武汉学霸高考725分 2020高考百度App、支付宝和微信查分方法...
- 【PMP考纲解读】【人】任务—冲突管理
- python爬取股吧评论_神级的爬虫工程师用Python教你爬取全站股票评论!买哪只有底呢!...
- python乘号的字符代码_python 命令行参数传入 乘号(*) 时出错
- FlexBuilder优化技巧
- 2-23财财的财经早报
- html设置顶边距,html整体页面边距怎么设置
- vue组件之间传值的几种方式
- 利用java8特性Stream流对list集合进行多个属性组装数据
- can协议crc计算_基于CAN总线的CRC校验码的原理与实现