Java-同步调用-异步调用-回调

一、简述

从软件模块之间的调用方式看,分为三类:同步调用、异步调用和回调。

1️⃣同步调用

同步调用是最基本并且最简单的一种调用方式,类 A 的 a() 调用类 B 的 b(),一直等待 b() 执行完毕,a() 继续往下走。该调用方式适用于 b() 执行时间不长的情况,因为 b() 执行时间过长或者直接阻塞的话,a() 的余下代码是无法执行下去的,这样会造成整个流程的阻塞。

Java-同步调用-异步调用-回调_第1张图片

2️⃣异步调用

异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式。类 A 的 a() 通过新起线程的方式调用类 B 的 b(),代码接着直接往下执行,这样无论 b() 执行时间多久,都不会阻塞住 a() 的执行。但是,由于 a() 不等待 b() 的执行完成,在 a() 需要 b() 执行结果的情况下(视具体业务而定,有些业务比如启异步线程发个微信通知、刷新缓存这种就没必要),必须通过一定的方式对 b() 的执行结果进行监听。Java 中,可以使用 Future+Callable 的方式做到这一点。

Java-同步调用-异步调用-回调_第2张图片

3️⃣回调

在面向对象的语言中,回调则是通过接口或抽象类来实现的,实现这种接口的类为回调类,回调类的对象为回调对象。回调的思想是:

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

综上:

  • 类 A 的 a() 调用类 B 的 b()。
  • 类 B 的 b() 执行完毕主动调用类 A 的 callback()。

该调用方式如图,也就是一种双向的调用方式。回调函数是一个函数或过程,不过它是一个由调用方自己实现,供被调用方使用的特殊函数。

Java-同步调用-异步调用-回调_第3张图片

二、下载文件的例子,很好!

(25条消息) Java回调方法(CallBack)_Amosstan的博客-CSDN博客_java 回调

你可能感兴趣的:(Java基础知识,java,jvm,开发语言)