Java 回调机制
Java 回调机制
在Java核心技术I中接触到了回调这个名词,在这里整理下思路。
1、方法调用的三种方式
软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。
- 同步调用:即阻塞调用,单向,是最基本并且最简单的一种调用方式,方法 a() 调用方法 b() ,等到 方法 b() 执行完后才继续执行方法 a().
- 异步调用:即通过异步消息进行通知,通过方法 a() new 一个线程调用方法 b() , 例如微信消息推送的情景。
- 回调:即双向,调用 + 反调。类A的a()方法调用类B的b()方法, 类B的b()方法执行完毕主动调用类A的callback()方法。
2、例子演示
一个员工做完了手头的工作,发送消息通知,得到回复才可以走人(笑了)。
2.1、回调接口类
复制/**
* 回调模式-回调接口类
*/
public interface Work {
void goHome(String content);
}
2.2、员工工作类,实现回调接口
/**
* 回调模式-员工工作类,实现回调接口类
*/
public class EmployeeWork implements Work{
/**
* 异步调用,发送完成工作的消息
*
* @param content 消息
* @param message 消息处理类
*/
public void complete(final String content, final Message message){
//创建线程
new Thread(() -> {
//将员工工作的引用传入消息处理的方法
message.ask(content, EmployeeWork.this);
}).start();
waiting();
}
/**
* 准备回家
*/
public void waiting() {
System.out.println("准备回家");
}
/**
* 被回调方法,得到消息可以回家了
* @param content
*/
@Override
public void goHome(String content) {
System.out.println("得到通知," + content + "工作,可以下班了");
}
}
2.3、消息处理类,这里回调方法。
/**
* 回调模式-消息处理类,回调方法
*/
public class Message {
/**
* 处理消息并回调
*
* @param content 消息
* @param work 回调接口,为了安全向上转型
*/
public void ask(String content, Work work) {
if (content.contains("完成")) {
System.out.println("收到" + content + "的通知");
//回调方法
work.goHome(content);
}
}
}
2.4、测试类
public class CallBackTest {
public static void main(String[] args) {
EmployeeWork employeeWork = new EmployeeWork();
String content = "完成微信推送";
employeeWork.complete(content, new Message());
}
}
输出结果如下:
准备回家
收到完成微信推送的通知
得到通知,完成微信推送工作,可以下班了
2.5、小结
以上是异步回调的简单示例,回调方法最大的优势在于就在于异步回调,这是其最被广为使用的原因。
3、应用场景
- Windows平台的消息机制。
- 异步调用微信接口,根据微信返回状态对出业务逻辑响应。
- Servlet中的Filter(过滤器)是基于回调函数,需容器支持。
4、回调的步骤
- A类实现接口CallBack callback。
- A类中包含了一个B的引用。
- B中有一个参数为CallBack的方法f(CallBack callback)。
- 在A类中调用B的方法f(CallBack callback)——注册回调接口。
- B就可以在f(CallBack callback)方法中调用A的方法——调用回调接口。
参考文章:Java并发编程网
参考博客:https://blog.csdn.net/qq_31749835/article/details/90073185
自我控制是最强者的本能-萧伯纳
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!