如何基于回调实现Java的异步调用

 更新时间:2020年06月30日 11:57:42   作者:lnlvinso  
这篇文章主要介绍了如何基于回调实现Java的异步调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  异步是指调用发出后,调用者不会立刻得到结果,而是在调用发出后,被调用者通知调用者,或通过回调函数处理这个调用。

  回调简单地说就是B中有一个A,这样A在调用B的某个方法时实际上是调用到了自己的方法。

  利用回调可以实现Java的异步调用,下面的例子来自网上。

  回调接口: 

public interface CallBack { 
  /** 
   * 执行回调方法 
   * @param objects  将处理后的结果作为参数返回给回调方法 
   */ 
  public void execute(Object... objects ); 
}

消息的发送者:

/**
 * 这个类相当于你自己
 */
public class Local implements CallBack,Runnable{ 
  
  private Remote remote; 
   
  /** 
   * 发送出去的消息 
   */ 
  private String message; 
   
  public Local(Remote remote, String message) { 
    super(); 
    this.remote = remote; 
    this.message = message; 
  } 
 
  /** 
   * 发送消息 
   */ 
  public void sendMessage() 
  { 
    /**当前线程的名称**/ 
    System.out.println(Thread.currentThread().getName()); 
    /**创建一个新的线程发送消息**/ 
    Thread thread = new Thread(this); 
    thread.start(); 
    /**当前线程继续执行**/ 
    System.out.println("Message has been sent by Local~!"); 
  } 
 
  /** 
   * 发送消息后的回调函数 
   */ 
  public void execute(Object... objects ) { 
    /**打印返回的消息**/ 
    System.out.println(objects[0]); 
    /**打印发送消息的线程名称**/ 
    System.out.println(Thread.currentThread().getName()); 
    /**中断发送消息的线程**/ 
    Thread.interrupted(); 
  } 
   
  public static void main(String[] args) 
  { 
    Local local = new Local(new Remote(),"Hello"); 
     
    local.sendMessage(); 
  } 
 
  public void run() { 
    remote.executeMessage(message, this); //这相当于给同学打电话,打完电话之后,这个线程就可以去做其他事情了,只不过等到你的同学打回电话给你的时候你要做出响应
  } 
}

消息的接收者:

/**
 * 这个类相当于你的同学
 */
public class Remote { 
 
  /** 
   * 处理消息 
   * @param msg  接收的消息 
   * @param callBack 回调函数处理类 
   */ 
  public void executeMessage(String msg,CallBack callBack) 
  { 
    /**模拟远程类正在处理其他事情,可能需要花费许多时间**/ 
    for(int i=0;i<1000000000;i++) 
    { 
       
    } 
    /**处理完其他事情,现在来处理消息**/ 
    System.out.println(msg); 
    System.out.println("I hava executed the message by Local"); 
    /**执行回调**/ 
    callBack.execute(new String[]{"Nice to meet you~!"}); //这相当于同学执行完之后打电话给你
  } 
   
}

这样就可以基于回调实现异步调用,当消息接受者处理任务完成后去调用消息发送者的方法。

异步调用的类似实现,当图片加载的比较慢时,可以先加载一张模糊的图片,当图片加载完成后再去进行局部的刷新。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java异常处理实例教程

    Java异常处理实例教程

    这篇文章主要为大家分享一份非常详细的Java异常处理实例教程,帮助大家更好的学习java异常处理,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Spring中BeanFactoryPostProcessors是如何执行的

    Spring中BeanFactoryPostProcessors是如何执行的

    BeanFactoryPostProcessor是Spring容器提供的一个扩展机制,它允许开发者在Bean的实例化和初始化之前对BeanDefinition进行修改和处理,这篇文章主要介绍了你知道Spring中BeanFactoryPostProcessors是如何执行的吗,需要的朋友可以参考下
    2023-11-11
  • 详解MyBatis-Puls中saveBatch批量添加慢的问题

    详解MyBatis-Puls中saveBatch批量添加慢的问题

    本文主要介绍了详解MyBatis-Puls中saveBatch批量添加慢的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Java mockito单元测试实现过程解析

    Java mockito单元测试实现过程解析

    这篇文章主要介绍了Java mockito单元测试实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • java实现服务器巡查的代码

    java实现服务器巡查的代码

    接到上级领导任务,需要实现一个这样的需求,一大批服务器,需要检查服务器能否ping通,ssh密码是否正常,以及检查服务器的cpu,内存,硬盘占用情况,下面通过java代码实现服务器巡查功能,需要的朋友一起看看吧
    2021-12-12
  • dubbo如何设置连接zookeeper权限

    dubbo如何设置连接zookeeper权限

    这篇文章主要介绍了dubbo如何设置连接zookeeper权限问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java调用linux shell脚本的方法

    Java调用linux shell脚本的方法

    这篇文章主要介绍了Java调用linux shell脚本的方法,需要的朋友可以参考下
    2015-02-02
  • 详解Spring系列之@ComponentScan自动扫描组件

    详解Spring系列之@ComponentScan自动扫描组件

    这篇文章主要介绍了Spring @ComponentScan自动扫描组件使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 一口气说出Java 6种延时队列的实现方法(面试官也得服)

    一口气说出Java 6种延时队列的实现方法(面试官也得服)

    这篇文章主要介绍了一口气说出Java 6种延时队列的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Maven中生命周期的具体使用

    Maven中生命周期的具体使用

    在 Maven 出现之前,项目构建的生命周期就已经存在,本文主要介绍了Maven中生命周期的具体使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09

最新评论