详解java 三种调用机制(同步、回调、异步)

 更新时间:2019年04月01日 10:56:10   作者:空心菜小能手  
这篇文章主要介绍了java 三种调用机制(同步、回调、异步),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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是张三完成
任务:5是张三完成

以上所述是小编给大家介绍的java 三种调用机制(同步、回调、异步)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Java IO与NIO高效的输入输出操作深入探究

    Java IO与NIO高效的输入输出操作深入探究

    这篇文章主要为大家介绍了Java IO与NIO高效的输入输出操作深入探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 总结java多线程之互斥与同步解决方案

    总结java多线程之互斥与同步解决方案

    文中总结了线程互斥与同步,synchronized使用细节及原理,Reentrylock使用细节等知识,对解决Java多线程互斥与同步等问题很有效,,需要的朋友可以参考下
    2021-05-05
  • mybatis分页效果实现代码

    mybatis分页效果实现代码

    这篇文章主要为大家详细介绍了mybatis分页效果的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Java 中This用法的实例详解

    Java 中This用法的实例详解

    这篇文章主要介绍了 Java 中This用法的实例详解的相关资料,希望通过本文大家能理解掌握this关键字的使用方法,需要的朋友可以参考下
    2017-09-09
  • 详细总结Java基础类和包装类

    详细总结Java基础类和包装类

    近几天一直在复习Java基础知识,今天就带大家总结一下Java基础类和包装类,下文中有非常详细的代码示例,对正在学习Java基础的小伙伴们很有帮助,需要的朋友可以参考下
    2021-05-05
  • java DataInputStream和DataOutputStream详解及实例代码

    java DataInputStream和DataOutputStream详解及实例代码

    这篇文章主要介绍了java DataInputStream和DataOutputStream详解及实例代码的相关资料,需要的朋友可以参考下
    2017-01-01
  • Java设计模式之java迭代器模式详解

    Java设计模式之java迭代器模式详解

    这篇文章主要介绍了java迭代器模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-09-09
  • 基于java socket实现 聊天小程序

    基于java socket实现 聊天小程序

    这篇文章主要介绍了基于java socket实现 聊天小程序,代码分为服务器和客户端,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Java并发工具辅助类代码实例

    Java并发工具辅助类代码实例

    这篇文章主要介绍了Java并发工具辅助类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • Java中注解@JsonFormat与@DateTimeFormat的使用

    Java中注解@JsonFormat与@DateTimeFormat的使用

    从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,本文主要介绍了Java中注解@JsonFormat与@DateTimeFormat的使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08

最新评论