Java 回调(Callback)机制与接口

1 Java程序调用的方式

程序设计过程中很多情况下会涉及到不同模块之间相互调用,这种调用往往分为三种方式进行:

  • 同步调用
  • 异步调用
  • 回调

1.1 同步调用

同步调用是一种阻塞式单向调用,也是普通程序中最常见的调用方式,假设A函数中部分功能需要由B函数实现,在A函数的某个地方调用了B函数,那么就需要等待B函数执行完毕后,才能继续执行A函数。
这种调用方式仅适用于B函数执行时间不长的情况,若B函数出现了长时间阻塞的情况,就会导致整个程序的阻塞。

1.2 异步调用

异步调用是一种类似于消息或事件的机制,是为了解决同步调用中阻塞的情况,当A方法中调用了B方法,不必等待B方法执行完成才运行A方法剩余部分,而是通过一种监听机制(Future+Callable,多线程部分)对B的执行结果进行监听。

1.3 回调

回调是一种双向调用机制,举例来说,A类中的方法A1调用了B类中的方法B1解决某个问题,当解决完毕后,B类中再反过来调用A类的方法A2(回调方法)来通知A类问题已经解决了。
在这里插入图片描述
回调也分为同步和异步,区别在于是否需要等待B类的方法返回结果给A类后,A类方法再执行剩余部分的功能。

2 定时器与监听器

Java核心思想卷1 第10版给出了一个回调接口的示例,构造一个定时器Timer,每隔固定时间间隔,执行一个操作。
java.swing.Timer对象构造器传入时间间隔和监听器对象,java.awt.event定义了ActionListener接口,监听器对象应该实现该接口,并重写执行时间函数actionPerformed(ActionEvent event)。

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

public class TimerTest {
    public static void main(String[] args)
    {
        ActionListener listener = new TimePrinter();

        Timer t = new Timer(10000,listener);
        t.start();
        JOptionPane.showMessageDialog(null,"Quit Program?");
        System.exit(0);
    }
}

class TimePrinter implements ActionListener
{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("At the tone, the time is " + new Date());
        Toolkit.getDefaultToolkit().beep();
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值