利用回调实现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的异步调用的更多相关文章
- 利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)
利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复 打印过程可能很长,这时候有可能需要暂停下来做一些事情,然后回来继续接着打印 打印过程中有2个线程:一个是程序运行的主线程, ...
- java实现异步调用实例
在JAVA平台,实现异步调用的角色有如下三个角色: 调用者 取货凭证 真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个取货凭证.然后在过一断时间后凭取货凭证来获取真正的数据. ...
- Java 实现异步调用
首先 我遇到的问题是 接口调用时需要更新缓存 而更新缓存又是个说快不快的过程 所以打算做异步调用 返回我所需要的结果即可 ,至于缓存什么时候更新完 就不是我所需要关注的了 废话不多说 上代码 publ ...
- java中异步调用注意
Future接口是Java标准API的一部分,在java.util.concurrent包中.Future接口是Java线程Future模式的实现,可以来进行异步计算. 有了Future就可以进行三段 ...
- Java实现异步调用
一.创建线程 @Test public void test0() throws Exception { System.out.println("main函数开始执行"); Thre ...
- java中异步调用的解决方法
package demo.future; import java.util.ArrayList; import java.util.List; import java.util.concurrent. ...
- SpringBoot | 第二十一章:异步开发之异步调用
前言 上一章节,我们知道了如何进行异步请求的处理.除了异步请求,一般上我们用的比较多的应该是异步调用.通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的.比如记录日志信息等业务.这个时候 ...
- SpringBoot:异步开发之异步调用
前言 除了异步请求,一般上我们用的比较多的应该是异步调用.通常在开发过程中,会遇到一个方法是和实际业务无关的,没有紧密性的.比如记录日志信息等业务.这个时候正常就是启一个新线程去做一些业务处理,让主线 ...
- [转载]C#异步调用四大方法详解
C#异步调用四大方法是什么呢?C#异步调用四大方法的使用是如何进行的呢?让我们首先了解下什么时候用到C#异步调用: .NET Framework 允许您C#异步调用任何方法.定义与您需要调用的方法具有 ...
随机推荐
- [51nod1373]哈利与他的机械键盘
作为一名屌丝程序员,机械键盘是哈利梦寐以求的神器.终于,在除夕夜的时候,他爸爸送了他一个机械键盘. 哈利的键盘与我们平常所见到的的键盘不一样,我们可以认为他的键盘是一个500*500的矩形,其中26个 ...
- HDU6235-Permutation-水题-2017中国大学生程序设计竞赛-哈尔滨站-重现赛
Permutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Tot ...
- 基于.netcore 开发的轻量Rpc框架
Rpc原理详解 博客上已经有人解释的很详细了,我就不在解释了.传送门 项目简介 项目是依赖于.net core2.0版本,内部都是依靠IOC来实现的,方便做自定义扩展.底层的通信是采用socket,s ...
- c# tolist() 浅析
在介绍tolist()的时候我先个大家介绍一下linq的延迟加载: var products = new List<Product> { , Category = "Electr ...
- Asp.Net Core Use MongoDB
前几天在网上想找一下Asp.Net Core使用MongoDB相关的文章,也看了几篇,发现都是在写简单的例子,这样的例子是不能用在生产环境的,不能用的生产环境的.封装一个东西一定是建立在你对这个东西足 ...
- cesium编程入门(二)环境搭建
环境搭建 环境搭建 编译 node 安装 Node.js安装包及源码下载地址为:https://nodejs.org/en/download/. 安装完成后,打开命令行,输入:node -v,如果结果 ...
- vim 的各种用法,很实用哦,都是本人是在工作中学习和总结的
(一)初级个性化配置你的vim 1.vim是什么? vim是Vi IMproved,是编辑器Vi的一个加强版,一个极其强大并符合IT工程师(程序员.运维)习惯的编辑器.如果你是一名职业的SE,那么一定 ...
- 本地apache 可以正常访问,lnmp服务器访问404错误
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; }
- 邓_php面试【003】——完整版
php面试题汇总四(基础篇附答案) 1. 什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰.主要特征:封装.继承.多态. 2. SESSION ...
- iOS 极光推送 如何点击推送消息跳转页面
假如你已经集成完了极光,恰好有这个问题不知如何解决,可以看看这篇文章,这篇是针对远程通知的,本地通知大同小异吧. 根据我项目的要求,极光推送跳转指定页面分为两种情况:app在后台情况和app在杀死的情 ...