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

来源:爱站网时间:2020-05-15编辑:网友分享
我们在Java开发的时候都会遇到多种多样的问题,我们都知道Java多线程回调本质上是要将这些变量或者对象进行交互,现在爱站技术频道就为大家介绍Java多线程回调方法实例解析,希望能给大家带来帮助。

我们在Java开发的时候都会遇到多种多样的问题,我们都知道Java多线程回调本质上是要将这些变量或者对象进行交互,现在爱站技术频道就为大家介绍Java多线程回调方法实例解析,希望能给大家带来帮助。

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

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

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

一.提问者的类

涉及到长时间的思考,要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多线程回调方法实例解析,想要做好程序开发以及运用,必须掌握一定的计算机语言,没有完善的逻辑思维,是不可能实现成功的。

上一篇:基于Spring中各个jar包的作用及依赖

下一篇:Java实现生产者消费者问题与读者写者问题详解

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载