通过简易例子讲解Java回调机制

网友投稿 223 2022-12-21


通过简易例子讲解Java回调机制

这篇文章主要介绍了通过简易例子讲解java回调机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习http://价值,需要的朋友可以参考下

首先说点题外话。为什么要写这篇文章,因为在看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("被叫醒了");

}

// 客户预约使用酒店的叫醒功http://能

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();

CustomekShtVJjwr 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方法执行完毕后,调用回调方法。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java线程死锁实例及解决方法
下一篇:Java多线程通信实现方式详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~