1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用
2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;
3:异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口
具体说来:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,

实例1:使用java中Timer来在给定时间间隔发送通知,每隔十秒打印一次数据
TimePrinter 实现ActionListener接口,该接口中的actionPerformed方法就是回调函数

import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
/**
*TimePrinter实现回调函数接口
*/
public class TimePrinter implements ActionListener {

@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
Date now=new Date();
System.out.println("Now time is "+now);
Toolkit.getDefaultToolkit().beep();
}

}

测试端

import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.Timer;

public class TimerTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
ActionListener listener=new TimePrinter();
Timer timer=new Timer(10000, listener);
timer.start();
JOptionPane.showMessageDialog(null, "quit");
System.exit(0);
}

}

运行结果:每隔10s打印,运行程序后需要耐心等待。

Now time is Fri Apr 15 22:31:53 CST 2016
Now time is Fri Apr 15 22:32:03 CST 2016
Now time is Fri Apr 15 22:32:13 CST 2016

从结果发现Timer每隔10s中回调listener中的方法。

实例2:老师平时学生布置任务后不可能一直等待和监督学生完成,老师通常会告诉学生,任务完成后给他打个电话或者发个信息,那么学生给老师返回结果的过程需要老师信息,这就是一个回调的过程。
public interface Callback {

public void taskResult(String name);

/**
* 学生必须指导老师的信息,才能回报任务情况,因此它必须实现回调接口
*
*/
public class Teacher implements Callback{

@Override
public void taskResult(String name) {
// TODO Auto-generated method stub
System.out.println("任务:"+name+"完成");
}

}

public class Student {
Callback callback=null;
//将老师的联系信息给学生
public void setCallback(Callback callback)
{
this.callback=callback;
}
public void doTask()
{
for(int m=1;m<6;m++)
{
callback.taskResult(m+"是张三");
}
}
}

测试端:

public class CallbackTest {

public static void main(String[] args) {
// TODO Auto-generated method stub
Student student=new Student();
student.setCallback(new Teacher());
student.doTask();
}

}

运行结果:

任务:1是张三完成
任务:2是张三完成
任务:3是张三完成
任务:4是张三完成

java中存在三种调用机制的更多相关文章

  1. 详解 Java 中的三种代理模式

    代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用 ...

  2. java常见的几种调用机制(同步调用,异步调用,回调)

    1.同步调用 同步调用是最基本的调用方式,对象b中的方法直接调用对象a的方法,这个时候程序会等待对象a的方法执行完返回结果之后才会继续往下走. 代码如下: public class A {public ...

  3. Java - Java 中的三种 ClassLoader

    1.虚拟机类加载器(称为“bootstrap class loader”),它本身没有父类加载器,它负责加载虚拟机的内置类,由于它是用C.C++写的,所以Java无法拿到其class文件,返回的都是空 ...

  4. java中的三种取整函数

        舍掉小数取整:Math.floor(3.5)=3 四舍五入取整:Math.rint(3.5)=4 进位取整:Math.ceil(3.1)=4

  5. java 中的三种引用,强引用,软引用,弱引用

    StrongReference   前引用,不会被系统GC回收,系统宁愿跑出OOM异常也不会回收强引用 SoftReference  软引用,在系统内存不足的时候,会被GC回收 WeakReferen ...

  6. Java三大框架之——Hibernate中的三种数据持久状态和缓存机制

    Hibernate中的三种状态   瞬时状态:刚创建的对象还没有被Session持久化.缓存中不存在这个对象的数据并且数据库中没有这个对象对应的数据为瞬时状态这个时候是没有OID. 持久状态:对象经过 ...

  7. Hibernate 系列 07 - Hibernate中Java对象的三种状态

    引导目录: Hibernate 系列教程 目录 1. Java对象的三种状态 当应用通过调用Hibernate API与框架发生交互时,需要从持久化的角度关注应用对象的生命周期. 持久化声明周期是Hi ...

  8. Hibernate中Java对象的三种状态

                                                                                     Hibernate中Java对象的三种 ...

  9. 【css笔记】css中的盒模型和三种定位机制(固定定位,绝对定位,浮动)

    html页面上的元素都可以看成是框组成的,框通过三种定位机制排列在一起就过程了我们看到的页面.而框就是盒模型. 盒模型 1.页面上的每个元素可以看成一个矩形框,每个框由元素的内容,内边距,边框和外边距 ...

随机推荐

  1. css图形——椭圆

    在css中,我们也使用border-radius属性来实现椭圆 语法 border-radius:x/y; 说明: x表示圆角的水平半径,y表示圆角的垂直半径. 例如:border-radius:30 ...

  2. 进程工作集WorkingSet (PSAPI 01)

    0x01  相关API 1.QueryWorkingSet 得到刚加入指定进程工作集的页信息 BOOL QueryWorkingSet( HANDLE hProcess , PVOID pv , DW ...

  3. Java的课堂实验

    题目是:用Aplet创建一个小程序,使得当你的鼠标经过图片时,放歌~ 其中,补充知识:1.MouseMotionListener这个和MouseListener这两个监听器要了解以下 2.Aplet这 ...

  4. python基础提高演练(名片管理系统的开发)

    综合应用 —— 名片管理系统 目标 综合应用已经学习过的知识点: 变量 流程控制 函数 模块 开发 名片管理系统 系统需求 1. 程序启动,显示名片管理系统欢迎界面,并显示功能菜单 ********* ...

  5. gzip 所使用压缩算法的基本原理(选摘)

    摘自:http://blog.csdn.net/ghevinn/article/details/45747465  gzip 所使用压缩算法的基本原理 gzip 对于要压缩的文件,首先使用LZ77算法 ...

  6. chown语法

    chown 作用:改变某个文件或目录的所有者和所属的组, 该命令可以向某个用户授权,使该用户编程指定文件的所有者或者改变文件的所属组, 用户可以是用户或者是用户ID, 用户组可以是组名或者租ID,   ...

  7. HTML和CSS标签常用命名规则

    1.Images 存放一些网站常用的图片: 2.Css 存放一些CSS文件: 3.Flash 存放一些Flash文件: 4.PSD 存放一些PSD源文件: 5.Temp 存放所有临时图片和其它文件: ...

  8. OperateResult 基础类及派生类介绍

    前言 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控制台输入下面的指令安装: Install-Package HslCommunication NuGet安 ...

  9. 实验楼高级bash脚本编程指南 挑战:简单的热身

    传送门:https://www.shiyanlou.com/courses/running# 步骤一 新建一个 test.sh 输出 Hello Shiyanlou! 步骤二 复制 test.sh 为 ...

  10. 在 Linux 平台及 IPv4 环境中构建 IPv6局域网 测试环境

    在 Linux 平台及 IPv4 环境中构建 IPv6 测试环境 1 IPv6简介 IPv6(Internet Protocol Version 6)作为 IPv4 的升级版本,它是作为一共软件升级安 ...