java回调机制

目录

  • 一、简介
  • 二、示例
    • 2.1 同步回调
    • 2.2 异步回调
    • 2.3 二者区别
  • 三、应用场景


一、简介

在Java中,回调是一种常见的编程模式,它允许一个对象将某个方法作为参数传递给另一个对象,以便在适当的时候调用该方法。

以类A调用类B方法为例:
在类A中方法a调用了类B中的b方法,b方法在执行完成之后,会执行类A中的callback()方法,这个callback方法就是回调函数,表明类B的b方法执行完成。
在这里插入图片描述


二、示例

回调可以分为同步回调和异步回调两种类型。

2.1 同步回调

1.classB实现回调接口重写回调方法
2.classA的工作方法参数含有回调接口
3.classB持有classA,work方法内执行了classA的工作方法,且参数为自己。
即classB.work—>classA.work—>classB.call

Callable

public interface Callable {
    /**
     * 回调函数
     */
    public void call();
}

classA

public class classA {

    public void work(Callable callable)
    {

        System.out.println("classA:收到classB的通知, 我要开始工作了");
        try {
            //模拟classA执行任务
            Thread.sleep(5000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("classA:我自己的工作完成了,通知一下classB,调用一下它的call方法");
        callable.call();//到了打电话给妈妈
    }

}

classB

public class classB implements Callable {

    //定义类classB实现了Callable接口,实现了call()回调函数的具体内容
    classA A;

    public classB(classA A) {
        this.A = A;
    }


    public void work() {
        System.out.println("classB:我要开始工作了 顺便通知一下classA 开始工作");
        A.work(this);
        System.out.println("classB:classA已经完成工作了");
    }

    @Override
    public void call() {
        System.out.println("classB:执行了自己的call 方法");
    }

}

Test 测试一下

public class Test {
    public static void main(String[] args) {
        classA A = new classA();
        classB B = new classB(A);
        B.work();
    }
}

在这里插入图片描述

2.2 异步回调

异步调用发生在某些业务十分耗时,又需要立即返回结果,这个时候需要开辟新的线程处理耗时业务,业务处理完了,再去回调回调函数,处理其他业务。

区别是classB中的work函数实现不同,开启了线程处理函数。不会阻塞最后的通知

    public void work() {
        System.out.println("classB:我要开始工作了 顺便通知一下classA 开始工作");
        new Thread(new Runnable() {
            @Override
            public void run() {
                A.work(classB.this);
            }
        }).start();
        System.out.println("classB:classA已经完成工作了");
    }

在这里插入图片描述

2.3 二者区别

  • 同步回调
    同步回调是指回调方法会在调用者的线程中立即执行,即回调方法和调用方法在同一个线程中执行。
    调用者需要等待回调方法执行完成后才能继续执行后续操作。
    适用于处理简单、快速的操作,不会阻塞调用者线程。
  • 异步回调
    异步回调是指回调方法会在另一个线程中执行,不会阻塞调用者的线程。
    调用者不需要等待回调方法执行完成,可以继续执行后续操作。
    适用于处理耗时操作,避免阻塞调用者线程,提高系统的并发性能和响应速度。

在实际应用中,选择使用同步回调还是异步回调取决于具体的场景和需求。如果操作简单且速度快,可以选择同步回调;如果操作耗时且需要避免阻塞调用者线程,可以选择异步回调。

三、应用场景

回调常用于处理事件结果,例如 A不仅仅执行B中的方法,而且还要监听B中此方法执行的结果,再根据结果状况执行A本身的方法。这种方式可以实现A与B之间的解耦,使得A能够监听并处理B方法执行的结果,从而实现更灵活的控制流程。

参考链接:
JAVA回调机制(CallBack)详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/605870.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CTF-reverse,逆向分析,对“左移4或右移4,即(x<<4) | (x >>4)的加密探讨

博主在刷题过程中遇上这样一个有意思的加密(如下图),苦苦思索其逆向运算,被硬控了很久,也没搜到什么资料来解释这个问题(也许是太简单??蒟蒻博主怀疑人生……) 经过博主不…

2024最新版JavaScript逆向爬虫教程-------基础篇之无限debugger的原理与绕过

目录 一、无限debugger的原理与绕过1.1 案例介绍1.2 实现原理1.3 绕过debugger方法1.3.1 禁用所有断点1.3.2 禁用局部断点1.3.3 替换文件1.3.4 函数置空与hook 二、补充2.1 改写JavaScript文件2.2 浏览器开发者工具中出现的VM开头的JS文件是什么? 一、无限debugger的…

正点原子Linux学习笔记(七)在 LCD 上显示 png 图片

在 LCD 上显示 png 图片 21.1 PNG 简介21.2 libpng 简介21.3 zlib 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 21.4 libpng 移植下载源码包编译源码安装目录下的文件夹介绍移植到开发板 21.5 libpng 使用说明libpng 的数据结构创建和初始化 png_struct 对象创建…

win11个性化锁屏界面怎么关闭?

win11个性化锁屏界面关闭方法对于win11用户来说,关闭个性化锁屏界面是一个常见问题。本文将由php小编苹果详细介绍如何执行此操作,分步指导并提供操作截图。继续阅读以了解具体步骤。 win11个性化锁屏界面关闭方法 第一步,点击底部Windows图…

企信通_企信通短信群发平台

现代社会,随着互联网技术的快速发展,传统的营销方式已经无法满足企业对于市场开拓和客户沟通的需求。群发作为一种高效、低成本的营销手段,逐渐成为了众多企业的首选。而在众多群发平台中,嘀迈信息企信通公司凭借其稳定可靠的服务…

GM EPUB Reader Pro for Mac:专业电子书阅读工具

GM EPUB Reader Pro是一款适用于Mac的专业EPUB阅读软件。它为用户提供了优质的阅读体验和丰富的功能。 GM EPUB Reader Pro支持EPUB格式,这是一种广泛使用的电子书格式,常用于小说、教育书籍、期刊等。您可以通过该软件打开和阅读EPUB文件,享…

提取网页元数据的Python库之lassie使用详解

概要 Lassie是一个用于提取网页元数据的Python库,它能够智能地抓取网页的标题、描述、关键图像等内容。Lassie的设计目的是为了简化从各种类型的网页中提取关键信息的过程,适用于需要预览链接内容的应用场景。 安装 安装Lassie非常简单,可以通过Python的包管理器pip进行安…

WPS二次开发系列:一文快速了解WPS SDK功能场景

作者持续关注 WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(QQ:250325397) 目录 SDK功能介绍 功能详解: 打开文档…

Windows系统完全卸载删除 Node.js (包含控制面板找不到node.js选项情况)

1.打开cmd命令行窗口,输入npm cache clean --force 回车执行 2.打开控制面板,在控制面板中把Node.js卸载 移除之后检查环境变量是否也移除:点击Path,点击编辑。 把环境变量中和node有关的全部移除,然后点击确定。 3.重…

WEB基础--JDBC基础

JDBC简介 JDBC概述 数据库持久化介绍 jdbc是java做数据库持久化的规范,持久化(persistence):把数据保存到可掉电式存储设备(断电之后,数据还在,比如硬盘,U盘)中以供之后使用。大多数情况下,特别是企业级…

Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期

攻击者改变了策略,在某些情况下转向勒索软件。安全和风险管理领导者必须通过提高检测和预防能力来为勒索软件攻击做好准备,同时还要改进其事后应对策略。 主要发现 勒索软件(无加密的数据盗窃攻击)是攻击者越来越多地使用的策略。…

SpringBoot启动流程分析之创建SpringApplication对象(一)

SpringBoot启动流程分析之创建SpringApplication对象(一) 目录: 文章目录 SpringBoot启动流程分析之创建SpringApplication对象(一)1、SpringApplication的构造方法1.1、推断应用程序类型1.2、设置Initializers1.3、设置Listener1.4、推断main方法所在类 流程分析…

Seata之XA 模式的使用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Seata 是一款开源的…

计算机专业,求你别再玩了,我都替你们着急

明确学习目标和方向:确定自己希望在计算机领域的哪个方向深入发展,如前端开发、后端开发、数据库管理、人工智能等。根据目标方向,制定详细的学习计划,确保所学知识与未来职业方向相匹配。 【PDF学习资料文末获取】 扎实基础知识…

变配电工程 变配电室智能监控系统 门禁 视频 环境 机器人

一、方案背景 要真正了解无人值守配电房的运行模式,我们必须对“无人值守”这一概念有准确的理解。它并不意味着完全没有工作人员管理,而是通过技术设备和人机协作来确保配电房的正常运行。 利用变配电室智能监控系统,可以实时获得配电室各…

【优选算法】—Leetcode—11—— 盛最多水的容器

1.题目 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#…

滑动窗口详解

目录 一、滑动窗口的特定步骤: 二、题目解析 1、⻓度最⼩的⼦数组---点击跳转题目 3、最⼤连续 1 的个数 III----点击跳转题目 4、将 x 减到 0 的最⼩操作数----点击跳转题目 5、⽔果成篮----点击跳转题目 滑动窗口是双指针算法中细分的一种,它由暴…

【AutoGPT】踩坑帖(follow李鱼皮)

本文写于2024年5月7日 参考视频:AutoGPT傻瓜式使用教程真实体验! 对应文章:炸裂的AutoGPT,帮我做了个网站! 平台:GitPod 云托管服务 原仓库已经改动很大,应使用的Repo为:Auto-GPT-ZH…

java后端15问!

前言 最近一位粉丝去面试一个中厂,Java后端。他说,好几道题答不上来,于是我帮忙整理了一波答案 G1收集器JVM内存划分对象进入老年代标志你在项目中用到的是哪种收集器,怎么调优的new对象的内存分布局部变量的内存分布Synchroniz…

中职大数据专业介绍:大数据技术应用

近年来,人工智能在经济发展、社会进步、国际政治经济格局等方面已经产生重大而深远的影响。规划纲要对“十四五”及未来十余年我国人工智能的发展目标、核心技术突破、智能化转型与应用,以及保障措施等多个方面都作出了部署。 据2020年全国教育事业发展统…
最新文章