详解Java回调的原理与实现

 更新时间:2017年03月30日 16:00:01   作者:关玮琳linSir  
回调函数,顾名思义,用于回调的函数。回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的调用(回调)时机。

回调原本应该是一个非常简单的概念,但是可能因为平时只用系统为我们写好的回调的接口了,自己很少实现回调,所以在自己实现回调的时候还是有一点点晕的,现在写这篇文章记录一下,也和大家分享一下怎么写回调接口。

回调

回调的概念:举个例子就是,我们想要问别人一道题,我们把题跟对方说了一下,对方说好,等我做完这道题,我就告诉你,这个时候就用到了回调,因为我们并不知道对方什么时候会做完,而是对方做完了来主动找我们。

同步回调

代码运行到某一个位置的时候,如果遇到了需要回调的代码,会在这里等待,等待回调结果返回后再继续执行。

异步回调

代码执行到需要回调的代码的时候,并不会停下来,而是继续执行,当然可能过一会回调的结果会返回回来。

具体代码:

总体的代码还是很简单的,就是模拟了一个打印机,还有一个人,打印机具有打印的功能,但是打印需要时间,不能在收到任务的同时给出反馈,需要等待一段时间才能给出反馈。这个人想做的就是打印一份简历,然后知道打印的结果。这里面代码实现了这两种方式。

Callback.java

public interface Callback {
  void printFinished(String msg);
}

Printer.java

public class Printer {
  public void print(Callback callback, String text) {
    System.out.println("正在打印 . . . ");
    try {
      Thread.currentThread();
      Thread.sleep(3000);// 毫秒
    } catch (Exception e) {
    }
    callback.printFinished("打印完成");
  }
}

People.java

public class People {

  Printer printer = new Printer();

  /*
   * 同步回调
   */
  public void goToPrintSyn(Callback callback, String text) {
    printer.print(callback, text);
  }

  /*
   * 异步回调
   */
  public void goToPrintASyn(Callback callback, String text) {
    new Thread(new Runnable() {
      public void run() {
        printer.print(callback, text);
      }
    }).start();
  }
}

Main.java

public class Main {//测试类,同步回调
  public static void main(String[] args) {
    People people = new People();
    Callback callback = new Callback() {
      @Override
      public void printFinished(String msg) {
        System.out.println("打印机告诉我的消息是 ---> " + msg);
      }
    };
    System.out.println("需要打印的内容是 ---> " + "打印一份简历");
    people.goToPrintSyn(callback, "打印一份简历");
    System.out.println("我在等待 打印机 给我反馈");
  }
}

Main.java

public class Main {//异步回调
  public static void main(String[] args) {
    People people = new People();
    Callback callback = new Callback() {
      @Override
      public void printFinished(String msg) {
        System.out.println("打印机告诉我的消息是 ---> " + msg);
      }
    };
    System.out.println("需要打印的内容是 ---> " + "打印一份简历");
    people.goToPrintASyn(callback, "打印一份简历");
    System.out.println("我在等待 打印机 给我反馈");
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 解决springboot URL带有斜杠的转义字符百分之2F导致的400错误

    解决springboot URL带有斜杠的转义字符百分之2F导致的400错误

    这篇文章主要介绍了解决springboot URL带有斜杠的转义字符百分之2F导致的400错误问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java使用正则表达式判断独立字符的存在(代码示例)

    Java使用正则表达式判断独立字符的存在(代码示例)

    通过使用正则表达式,我们可以更加灵活地判断字符串中是否包含特定的字符,并且可以控制匹配的条件,如独立的字符,这为我们处理字符串提供了更多的选择和功能,这篇文章主要介绍了Java使用正则表达式判断独立字符的存在,需要的朋友可以参考下
    2023-10-10
  • Java详解IO流创建读取与写入操作

    Java详解IO流创建读取与写入操作

    这篇文章主要介绍了Java IO流,同时也介绍了流中的一些相关的内容,并且通过大量的案例供大家理解。最后通过一些经典的案例帮助大家对前面所学的知识做了一个综合的应用,需要的朋友可以参考一下
    2022-05-05
  • Java中List集合去重方法以及效率对比

    Java中List集合去重方法以及效率对比

    这篇文章主要给大家介绍了关于Java中List集合去重方法以及效率对比的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • JAVA计算两个日期相差的实例

    JAVA计算两个日期相差的实例

    在java中我找了一下关于计算两个日期之间相差的天数方法有10多种实现方法,下面总结一下常用的几种计算两个日期之间相差的天数实例
    2013-11-11
  • 详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环

    这篇文章主要介绍了详解Java中list,set,map的遍历与增强for循环的相关资料,需要的朋友可以参考下
    2017-02-02
  • 你一定不知道的Java Unsafe用法详解

    你一定不知道的Java Unsafe用法详解

    Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,下面这篇文章主要给大家介绍了关于Java Unsafe用法的相关资料,需要的朋友可以参考下
    2021-10-10
  • Java操作pdf的工具类itext的处理方法

    Java操作pdf的工具类itext的处理方法

    这篇文章主要介绍了Java操作pdf的工具类itext,iText是一种生成PDF报表的Java组件,通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,需要的朋友可以参考下
    2022-04-04
  • Spring Cloud 系列之注册中心 Eureka详解

    Spring Cloud 系列之注册中心 Eureka详解

    Netflix Eureka 是由 Netflix 开源的一款基于 REST 的服务发现组件,包括 Eureka Server 及 Eureka Client。这篇文章主要介绍了Spring Cloud 系列之注册中心 Eureka,需要的朋友可以参考下
    2020-11-11
  • spring boot 即时重新启动(热更替)使用说明

    spring boot 即时重新启动(热更替)使用说明

    这篇文章主要介绍了spring boot 即时重新启动(热更替)的相关资料,需要的朋友可以参考下
    2017-12-12

最新评论