Java中的回调函数

摘要:
回调函数1.定义在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。在java的回调函数,以类A调用类B方法为例 在类A中方法a调用了类B中的b方法,b方法在执行完成之后,会执行类A中的callback()方法,这个callback方法就是回调函数,表明类B的b方法执行完成。 2.同步回调同步回调的话会等待回调函数执行完

回调函数

1.定义

在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

Java中的回调函数第1张

在java的回调函数,以类A调用类B方法为例
在类A中方法a调用了类B中的b方法,b方法在执行完成之后,会执行类A中的callback()方法,这个callback方法就是回调函数,表明类B的b方法执行完成。
Java中的回调函数第2张

2.同步回调

同步回调的话会等待回调函数执行完成之后才执行其他的业务。

以儿子要坐火车出远门,跟妈妈告别,到了学校之后打电话告诉自己到学校这件事为例:

接口:

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

妈妈:

/**
 * @author xiaobai
 */ //定义类Mother实现了Callable接口,实现了call()回调函数的具体内容public class Mother implements Callable {
    Son son;    public Mother(Son son)    {        this.son=son;    }    //表示妈妈和儿子的分别函数,儿子在这期间搭乘火车离开    public void parting()    {
       System.out.println("开始执行同步回调函数");
       son.rideTrain(this);
       System.out.println("同步回调函数执行完成");    }    @Override    public void call() {
        System.out.println("儿子到学校了");    }}12345678910111213141516171819202122

儿子:

public class Son {    public void rideTrain(Callable callable)    {        try {           //模拟坐火车
            Thread.sleep(5000);        } catch (Exception e) {
            e.printStackTrace();        }
        callable.call();//到了打电话给妈妈    }}123456789101112

测试类:

public class Test {    public static void main(String[] args) {
        Son jack=new Son();
        Mother mother=new Mother(jack);
        mother.parting();    }}1234567

运行结果:

开始执行同步回调函数
儿子到学校了
同步回调函数执行完成123
3 异步回调

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

还是以妈妈和儿子为例,区别是妈妈中的parting函数不同实现,开启了线程处理函数。

/**
 * @author xiaobai
 */public class Mother implements Callable {

    Son son;    public Mother(Son son)    {        this.son=son;    }    public void parting()    {
        System.out.println("开始执行异步回调函数");        new Thread(new Runnable() {            @Override            public void run() {
                son.rideTrain(Mother.this);            }        }).start();
        System.out.println("异步回调函数执行完成");//开启线程处理儿子坐火车的函数,这条打印语句会在回调函数执行完成前执行。    }    @Override    public void call() {
        System.out.println("儿子到学校了");    }}1234567891011121314151617181920212223242526272829

最后的运行结果:

开始执行异步回调函数
异步回调函数执行完成
儿子到学校了123
4 总结

1 回调函数可以用于事件监听,当发生相对应的事件时系统可以自动调用对应的函数
2 回调函数可以用于中断处理。

免责声明:文章转载自《Java中的回调函数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇各种实用的 PHP 开源库推荐【转】浅谈基于WOPI协议实现跨浏览器的Office在线编辑解决方案下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CF55D Beautiful numbers

题目链接http://codeforces.com/problemset/problem/55/D 分析 看到这道题的时候我想到的是状压DP,压一下0~9是否出现过,但发现之后就不好弄了,因为它不仅可能出现,而且还会出现很多次,看数据范围就知道暴力肯定不可能的,这数据大小就算跑一遍循环也能T掉,所以这里就要用到数位DP了。 状压DP是用一个十进制数来表示二...

Python合集之Python跳转语句(二)

        在上一节的合集中,我们了解了Python跳转语句中的break语句的相关知识,本节我们将进一步了解一下Python跳转语句中的continue及Pass语句的相关知识。 1.continue语句        continue语句的作用没有break语句强大,它只能终止本次循环而提前进入到下一次循环中。     continue语句的语法比...

Java 的布局管理器GridBagLayout的使用方法(转)

GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的, GridBagLayout 类是一个灵活的布局管理器,它不要求组件的大小相同便可以将组件垂直、水平或沿它们的基线对齐。 每个 GridBagLayout 对象维持一个动态的矩形单元网格,每个组件占用一个或多个这样的单元,...

Serializable

转自http://blog.csdn.net/cdl2008sky/article/details/6747396 Serizlizable 作用 对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中。JVM停止之后,这些状态就丢失了。在很多情况下,对象的内部状态是需要被持久化下来的。提到持久化,最直接的做法是保存到文件系统或是数据库之中。...

vue自定义指令

钩子函数 vue除了默认内置的指令,也允许自定义指令。先了解一下钩子函数: 一个指令定义对象可以提供如下几个钩子函数 (均为可选): bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。 inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。 update:所在组件的 VNode 更新...

IDEA中导入多个包自动合并为星号

  IDEA中导入同一个包下的几个class会自动合并为星号,如下图。可以通过设置让其不自动合并为星号。 1、选择File→Settings→Editor→Code style→Java,再点击右边的Imports,将Class count to use import with '*'的数量调高即可。 还可以设置一些规则: Names count to...