夯实Java基础系列11:深入理解Java中的回调机制

  • 时间:
  • 浏览:3
  • 来源:彩神大发幸运飞艇_神彩大发幸运飞艇官方

本帕累托图摘自https://www.cnblogs.com/xrq730/p/6424471.html

2 数学老师需用提供另另另4个 方式以便Tom做完题目那帮我够将答案告诉他。

1、哪几种是回调?

一般来说,模块之间都位于一定的调用关系,从调用方式上看,能也能分为三类同步调用、异步调用和回调。同步调用是什儿 阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的代码得以执行。异步调用是什儿 类似于消息或事件的机制除理了同步阻塞的间题,类似于 A通知 B后,我们我们我们 各走各的路,互不影响,无需像同步调用那样, A通知 B后,非得等到 B走完后 , A才继续走 。回调是什儿 双向的调用模式,也却一段话,被调用的接口被调用时也会调用对方的接口,类似于A要调用B,B在执行完又要调用A。

[外链图片转存失败(img-dapFATDy-1569148364574)(https://upload-images.jianshu.io/upload_images/3796264-6a5b5b898aa3930e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1031/format/webp)]

前几天公司面试有问道java回调的间题,或多或少这方面也没人没人来越多研究,只是我回答的含糊不清,这回特意来补习一下。看完看网上的回调解释和例子,都没人的绕口,得看半天也能绕回来,我觉得吧,回调是个很简单的机制。在这里我用简单的语言先来解释一下:假设有另另另4个 类,分别是A和B,在A含高另另另4个 方式a(),B含高另另另4个 方式b();在A上端调用B中的方式b(),而方式b()中调用了方式a(),完后 子就一齐实现了b()和a()另另另4个 方式的功能。

https://blog.csdn.net/fengye454545/article/details/30198446

https://blog.csdn.net/xiaanming/article/details/8703708/https://www.cnblogs.com/prayjourney/p/9667835.htmlhttps://blog.csdn.net/qq_25652949/article/details/86572948https://my.oschina.net/u/3703858/blog/1798627

测试结果:

本文是微信公众号【Java技术江湖】的《夯实Java基础系列博文》其中一篇,本文帕累托图内容来源于网络,为了把本文主题讲得清晰透彻,也整合了只是我我认为不错的技术博客内容,引用其中了或多或少比较好的博客文章,如有侵权,请联系作者。

该系列博文会告诉你怎样从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点手中的实现原理,更全部地了解整个Java技术体系,形成被委托人的知识框架。为了更好地总结和检验你的学习成果,本系列文章也会提供每个知识点对应的面试题以及参考答案。

3 Tom需用数学老师的另另另4个 引用,以便Tom把答案给这位老师,只是我否隔壁的体育老师。

https://github.com/h2pl/Java-Tutorial

或多或少我们我们我们 我想要实时关注我更新的文章以及分享的干货一段话,能也能关注我的公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM、SpringBoot、MySQL、分布式、上端件、集群、Linux、网络、多系统进程,偶尔讲点Docker、ELK,一齐也分享技术干货和学习经验,致力于Java全栈开发!

喜欢一段话麻烦点下Star哈

二、Java的回调-中

完后 细心的伙伴或多或少会发现,小李的代码全部写死了,完后 子的场合或多或少适用和小明一齐去吃饭,完后 假若小李洗漱完不吃饭了,想和小王上网去,完后 子就不适用了。我觉得上端是伪代码,仅仅是帮助我们我们我们 理解的,真正状况下是需用利用接口来设置回调的。现在我们我们我们 继续用小明和小李去吃饭的例子来讲讲接口是怎样使用的。

小明和小李相约一齐去吃早饭,或多或少小李起的有点硬晚要先洗漱,等小李洗漱完成后,通知小明再一齐去吃饭。小明只是我类A,小李只是我类B。不同的是我们我们我们 新建另另另4个 吃饭的接口EatRice,接口含高个抽象方式eat()。在小明中调用什儿 接口,并实现eat();小李声明什儿 接口对象,或多或少调用什儿 接口的抽象方式。这里或多或少有点硬绕口,不过没关系,看看例子就很清楚了。

Java多系统进程中能也能通过callable和future或futuretask结合来获取系统进程执行后的返回值。实现方式是通过get方式来调用callable的call方式获取返回值。

第一步: 执行UpperService.callBottomService();

本系列文章将分派到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看

或多或少什儿 方式,或多或少方式a()不等候方式b()的执行完成,在方式a()需用方式b()执行结果的状况下(视具体业务而定,或多或少业务比如启异步系统进程发个微信通知、刷新另另另4个 缓存什儿 就没必要),需用通过一定的方式对方式b()的执行结果进行监听。

我觉得什儿 方式本质上是是否是回调,回调要求的是任务完成完后 被调用者主动回调调用者的接口。而这里是调用者主动使用get方式阻塞获取返回值。

学生接口

文章首发于我的被委托人博客:

异步调用是为了除理同步调用或多或少另另4个 劲出显阻塞,原因整个流程卡住而产生的什儿 调用方式。类A的方式方式a()通过新起系统进程的方式调用类B的方式b(),代码接着直接往下执行,完后 无论方式b()执行时间多久,是是否是会阻塞住方式a()的执行。

不好意思,上述解释我看完好几遍,也没理解其中深刻奥秘,相信或多或少读者你也一样。光说不练假把式,咱们还是以实战理解脉络。

2、回调的用途

回调一般用于层间媒体协作,上层将本层函数安装入下层,什儿 函数只是我回调,而下层在一定条件下触发回调。类似于作为另另另4个 驱动,是另另另4个 底层,他在收到另另另4个 数据时,除了完成本层的除理工作外,还将进行回调,将什儿 数据交给上层应用层来做进一步除理,这在分层的数据通信中很普遍。

@[toc]

(2)异步调用

作者是 985 硕士,蚂蚁金服 JAVA 工程师,专注于 JAVA 后端技术栈:SpringBoot、MySQL、分布式、上端件、微服务,一齐也懂点投资理财,偶尔讲点算法和计算机理论基础,坚持学习和写作,相信终身学习的力量!

1.1.2 上层服务接口: UpperService.java

完后 被委托人偶尔听说过回调机制,隐隐约约也能懂或多或少意思,或多或少当让被委托人写另另另4个 简单的示例系统进程时,被委托人就傻眼了。随着工作经验的增加,被委托人另另4个 劲听到这儿使用了回调,那儿使用了回调,被委托人是完后 好好研究一下Java回调机制了。网上关于Java回调的文章一抓一大把,或多或少看完另另4个 劲云里雾里,不知所云,有点硬是看完抓取别人的代码走两步时,另另4个 劲现眼。于是被委托人决定写一篇关于Java机制的文章,以方便我们我们我们 和被委托人更深入的学习Java回调机制。

或多或少对本系列文章有哪几种建议,或多或少是有哪几种间题一段话,也能也能关注公众号【Java技术江湖】联系作者,欢迎你参与本系列博文的创作和修订。

1 数学老师需用Tom的另另另4个 引用,或多或少也能将题目发给Tom。

(1)同步调用

完后 子就通过接口的形式实现了软编码。通过接口的形式帮我实现小李洗漱完后 ,和小王一齐去上网。代码如下

系统进程员3T技术学习资源: 或多或少系统进程员学习技术的资源大礼包,关注公众号后,后台回复关键字 “资料” 即可免费无套路获取。

(3)回调

学生Tom

回调接口,能也能理解为老师接口

注意输出结果:

疑惑:为何没人麻烦,我直接在类A中的B.b()方式下调用a()方式就行了呗。

解答:回调更像是另另另4个 约定,只是我或多或少我调用了b()方式,没人就需用要回调,而不需用显示调用

一、Java的回调-浅

我们我们我们 用例子来解释:小明和小李相约一齐去吃早饭,或多或少小李起的有点硬晚要先洗漱,等小李洗漱完成后,通知小明再一齐去吃饭。小明只是我类A,小李只是我类B。一齐去吃饭什儿 事件只是我方式a(),小李去洗漱只是我方式b()。

第三步:执行UpperService.upperTaskAfterCallBottomService()

同步调用时序图

测试类

1.1.4 Test测试类:Test.java

1.1.1 底层服务类:BottomService.java



数学老师类

同步调用是最基本或多或少最简单的什儿 调用方式,类A的方式a()调用类B的方式b(),另另4个 劲等候b()方式执行完毕,a()方式继续往下走。什儿 调用方式适用于方式b()执行时间不长的状况,或多或少b()方式执行时间一长或多或少直接阻塞一段话,a()方式的余下代码是无法执行下去的,完后 会造成整个流程的阻塞。

EatRice接口:

不过上端或多或少说过了什儿 是是否是回调函数,只是我不到完后 子,正确的方式如下

在另另另4个 应用系统中,无论使用何种语言开发,必然位于模块之间的调用,调用的方式分为几种:

数学老师让Tom做一道题,或多或少Tom做题期间数学老师无需盯着Tom,只是我在玩手机,等Tom把题目做完后 再把答案告诉老师。

首先,哪几种是回调函数,引用百度百科的解释:回调函数只是我另另另4个 通过函数指针调用的函数。或多或少你把函数的指针(地址)作为参数传递给完后 函数,当什儿 指针被用来调用其所指向的函数时,我们我们我们 只是我这是回调函数。回调函数是是否是由该函数的实现方直接调用,只是我在特定的事件或条件位于时由另外的一方调用的,用于对该事件或条件进行响应[2].

在Java中,能也能使用Future+Callable的方式做到什儿 点,具体做法能也能参见我的这篇文章Java多系统进程21:多系统进程下或多或少组件之CyclicBarrier、Callable、Future和FutureTask。

同步调用时序图:

1.1.3 上层服务接口实现类:UpperServiceImpl.java

Java工程师必备学习资源: 或多或少Java工程师常用学习资源,关注公众号后,后台回复关键字 “Java” 即可免费无套路获取。

完后 子就能也能实现washFace()一齐也能实现eat()。小李洗漱完后 ,再通知小明一齐去吃饭,这只是我回调。

第二步: 执行BottomService.bottom();

是同步方式,Test调用callBottomService()等候执行结束英语 了,或多或少再执行下一步,即执行结束英语 了。callBottomService结束英语 了了执行时间为Thu Jan 19 14:59:58 CST 2017,执行结束英语 了时间为Thu Jan 19 15:00:01 CST 2017,耗时3秒钟,与模拟的耗时时间一致,即300毫秒。

www.how2playlife.com

本文以底层服务BottomService和上层服务UpperService为示例,利用上层服务调用底层服务,整体执行过程如下:

1.1.5 输出结果: