美文网首页Java笔试面试
用简易例子讲Java中的回调机制

用简易例子讲Java中的回调机制

作者: 小北觅 | 来源:发表于2018-11-01 14:41 被阅读7次

首先说点题外话。为什么要写这篇文章,因为在看J.U.C包的FutureTask源码的时候,有一个done()方法,这是个抽象方法,用户实现它之后,FutureTask会在执行完后调用这个方法。这就是回调机制,回调的思想就是:

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

给出思想过于抽象,所以我会举出一个简单的实例(虽然简单,但是能说明问题),并总结Java实现回调的步骤。

实例基于知乎上一个解释什么是回调机制的回答。

描述: 一个顾客入住了一个酒店,酒店提供叫醒服务,顾客由于第二天早晨有很重要的事情,所以使用了叫醒服务。让酒店工作人员在第二天早晨7:00叫醒顾客。

在这个例子中,顾客是A类,酒店是B类,顾客预订叫醒服务相当于A调用了B的b方法,酒店叫醒顾客相当于B调用了A的callback方法(被叫醒)。

下面给出代码:

1、首先是回调接口:

package callback;
//回调接口
public interface CallBack {
    
    public void beWakedUp();
}

2、接着是顾客类
顾客类实现回调接口

package callback;

public class Customer implements CallBack {
    //顾客同时持有酒店类的对象,后面定义
    private Hotel hotel;

    public Customer(Hotel hotel) {
        this.hotel = hotel;
    }

    @Override
    public void beWakedUp() {
        System.out.println("被叫醒了");
    }

    // 客户预约使用酒店的叫醒功能
    public void bookWakeService() {
        hotel.wakeService(this);
    }
    // 省略get set
}

3、酒店类

package callback;

public class Hotel {

    public void wakeService(CallBack callBack) {
        System.out.println("顾客预约了叫醒服务");
        try {
            // 模拟时间过了一晚上
            Thread.sleep(3000);
            System.out.println("时间过去了一夜");
            callBack.beWakedUp();
        } catch (InterruptedException e) {

            e.printStackTrace();
        }
    }
}

4、测试主类

package callback;

public class Main {
    
    public static void main(String[] args) {
        Hotel hotel = new Hotel();
        Customer customer = new Customer(hotel);
        customer.bookWakeService();
    }
}

输出结果为:


不知道你对回调机制有没有进一步理解呢?

最后总结一下Java中实现回调机制的大体步骤吧:

  • 定义回调接口CallBack
  • 类A实现回调接口CallBack,同时持有类B的对象b
  • 类B中有方法method(CallBack cb)
  • 由于A中持有B的对象,所以A可以调用B的method方法,并将自身作为参数传入method(因为A实现了CallBack接口,所以可以传入)。
  • method方法执行完毕后,调用回调方法。

相关文章

  • Callback 回调函数

    帮助理解的文章: 用简易例子讲Java中的回调机制[https://www.jianshu.com/p/eb25a...

  • 用简易例子讲Java中的回调机制

    首先说点题外话。为什么要写这篇文章,因为在看J.U.C包的FutureTask源码的时候,有一个done()方法,...

  • Java相关博客推荐阅读--Java回调机制

    Java回调机制 这篇文章循循渐进的介绍了什么是Java回调机制,以及在Java中的简单实现。通过形象生动的例子,...

  • 回调callback

    title: 回调callback 参考: JAVA回调机制(CallBack)详解一个经典例子让你彻彻底底理解j...

  • Java基础9:解读Java回调机制

    本文主要介绍了Java中的回调机制,以及Java多线程中类似回调的机制。 具体代码在我的GitHub中可以找到 h...

  • Thinging in Java阅读时遇到的问题

    菜鸟教程Java回调机制解读Java回调机制总结内部类标识符JAVA foreach和普通for循环是否需要判断为...

  • Java中的回调机制

    调用方式 例子: 同步调用情况 同步调用是最简单的方式,按照顺序,a调用b,当b执行完,那么a才会继续往下执行。如...

  • Java中的回调机制

    最近看书老是看到书里说道回调方法,一脸懵逼的不懂什么意思,于是就google查了下,发现好多说的都不是特别的直白,...

  • java接口回调机制

    转载的正文 地址--理解java接口回调机制

  • Java中回调机制的使用

    1,场景:模拟教师给学生布置作业,学生完成后将结果回告教师2,初始化学生类: 3,设置回调方法。(此方法被Stud...

网友评论

    本文标题:用简易例子讲Java中的回调机制

    本文链接:https://www.haomeiwen.com/subject/xtcxxqtx.html