Java多线程回调方法实例解析

 更新时间:2017年11月09日 09:51:17   作者:峥嵘life  
这篇文章主要介绍了Java多线程回调方法实例解析,具有一定参考价值,需要的朋友可以了解下。

所谓回调,就是客户程序C调用服务程序S中的某个方法A,然后S又在某个时候反过来调用C中的某个方法B,对于C来说,这个B便叫做回调方法。

下面看一个实际例子来理解:

本示例设置一个提问者,一个回答者,而回答者需要回答提问者一个很深奥的问题时,这时需要很多时间去查找,提问者又开始做其他的事情,

等回答者找到答案后,再把答案告诉提问者。

一.提问者的类

涉及到长时间的思考,要sleep,要继承Thread

package com.xykj.thread;
public class XiaoZhang extends Thread {
  // 回答1+1,很简单的问题不需要线程
  public int add(int num1, int num2) {
    return num1 + num2;
  }
  // 重写run方法
  @Override
  public void run() {
    // 回答地球为什么是圆的
    askquestion();
    super.run();
  }
  // 回调接口的创建,里面要有一个回调方法
  //回调接口什么时候用呢?这个思路是最重要的
  //
  public static interface CallPhone {
    public void call(String question);
  }
  // 回调接口的对象
  CallPhone callPhone;
  // 回答地球为什么是圆的
  private void askquestion() {
    System.err.println("开始查找资料!");
    try {
      sleep(3000);// 思考3天
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
    // 把答案返回到回调接口的call方法里面
    if (callPhone!=null) {//提问者实例化callPhone对象,相当于提问者已经告诉我,我到时用什么方式回复答案
      //这个接口的方法实现是在提问者的类里面
      callPhone.call("知道了,!!!~~~~百度有啊");
    }   
  }
}

二.提问者的类

package com.xykj.thread;
import com.xykj.thread.XiaoZhang.CallPhone;
public class MainClass {
  /**
   * java回调方法的使用
   * 实际操作时的步骤:(以本实例解释)
   * 1.在回答者的类内创建回调的接口
   * 2.在回答者的类内创建回调接口的对象,
   * 3.在提问者类里面实例化接口对象,重写接口方法
   * 2.-3.这个点很重要,回调对象的实例化,要在提问者的类内实例化,然后重写接口的方法
   * 相当于提问者先把一个联络方式给回答者,回答者找到答案后,通过固定的联络方式,来告诉提问者答案。
   * 4.调用开始新线程的start方法
   * 5.原来的提问者还可以做自己的事
   * */
  public static void main(String[] args) {
    // 小王问小张1+1=?,线程同步
    XiaoZhang xiaoZhang = new XiaoZhang();
    int i = xiaoZhang.add(1, 1);//回答1+1的答案
    // 问小张地球为什么是圆的?回调方法的使用
    //这相当于先定好一个返答案的方式,再来执行实际操作
    // 实例化回调接口的对象
    CallPhone phone = new CallPhone() {
      @Override
      public void call(String question) {
       //回答问题者,回答后,才能输出答案
       System.err.println(question);
      }
    };
    //把回调对象赋值给回答者的回调对象,回答问题者的回调对象才能回答问题
    xiaoZhang.callPhone = phone;
    System.out.println("交代完毕!");
    //相关交代完毕之后再执行查询操作
    xiaoZhang.start();
    //小王做自己的事!
    System.out.println("小王做自己的事!");
  }
}

运行结果:

可以看到:肯定是要提问者先交代完回答者怎样的方式回答问题,

然后提问者再做自己的事,回答者开始思考答案。

这里交代联络方式具体表现就是在提问者的类里面实例化回调接口和实现回答的方法。

大部分内容已在代码中体现,这里便不再赘述。

总结

以上就是本文关于Java多线程回调方法实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:java多线程编程实例浅谈Java多线程的优点及代码示例Java利用future及时获取多线程运行结果等以及本站其他相关内容,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

相关文章

  • Java通过动态规划设计股票买卖最佳时机

    Java通过动态规划设计股票买卖最佳时机

    动态规划可谓是大名鼎鼎,笔试面试中的高频考点,也是重点难点,动态规划类型题目灵活多变,难度系数也相对较高,往往我们做不好动态规划的题目就会与心仪的offer失之交臂,本篇文章我们就一起来研究一下动态规划设计股票买卖最佳时机
    2022-10-10
  • Java实现拓扑排序算法的示例代码

    Java实现拓扑排序算法的示例代码

    在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。本文将为大家讲讲拓扑排序算法的原理及实现,需要的可以参考一下
    2022-07-07
  • Java 数据结构与算法系列精讲之环形链表

    Java 数据结构与算法系列精讲之环形链表

    无论是静态链表还是动态链表,有时在解决具体问题时,需要我们对其结构进行稍微地调整。比如,可以把链表的两头连接,使其成为了一个环状链表,通常称为循环链表
    2022-02-02
  • Java常用类之System类的使用指南

    Java常用类之System类的使用指南

    System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包。本文将通过示例为大家详细讲讲System类的使用,需要的可以参考一下
    2022-07-07
  • Spring Boot假死诊断实战记录

    Spring Boot假死诊断实战记录

    这篇文章主要给大家介绍了关于Spring Boot假死诊断的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • SpringMVC 重新定向redirect请求中携带数据方式

    SpringMVC 重新定向redirect请求中携带数据方式

    这篇文章主要介绍了SpringMVC 重新定向redirect请求中携带数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot实现图片防盗链功能

    SpringBoot实现图片防盗链功能

    出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地址后被下载,或者,不想浏览器直接访问图片链接,所以本文将给大家介绍SpringBoot实现图片防盗链功能,需要的朋友可以参考下
    2024-04-04
  • Java BigDecimal类的一般使用、BigDecimal转double方式

    Java BigDecimal类的一般使用、BigDecimal转double方式

    这篇文章主要介绍了Java BigDecimal类的一般使用、BigDecimal转double方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java class文件格式之特殊字符串_动力节点Java学院整理

    Java class文件格式之特殊字符串_动力节点Java学院整理

    特殊字符串出现在class文件中的常量池中,本着循序渐进和减少跨度的原则, 首先把class文件中的特殊字符串做一个详细的介绍, 然后再回过头来继续讲解常量池,对java class 文件格式相关知识感兴趣的的朋友一起学习吧
    2017-06-06
  • 通过实例解析JMM和Volatile底层原理

    通过实例解析JMM和Volatile底层原理

    这篇文章主要介绍了通过实例解析JMM和Volatile底层原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01

最新评论