java 中的异步回调
异步回调,本来在c#中是一件极为简单和优雅的事情,想不到在java的世界里,却如此烦琐,先看下类图:
先定义了一个CallBackTask,做为外层的面子工程,其主要工作为start 开始一个异步操作,然而真正干活的是CallBackBody,它里面的execute才是真正要处理的事情,如果成功,则触发onSucess,否则触发onFailure。
CallBackApp做为最终的运行舞台,这里面还得单独跑一个线程,来启动CallBackTask,这样才不会阻塞后面的处理。
CallBackBody:
package com.cnblogs.yjmyzz.test.callback;public abstract class CallBackBody {void onSuccess(Object context) {System.out.println("onSuccess");}void onFailure(Object context) {System.out.println("onFailure");}abstract void execute(Object context) throws Exception;
}
CallBackTask:
package com.cnblogs.yjmyzz.test.callback;public class CallBackTask {private CallBackBody body;public CallBackTask(CallBackBody body) {this.body = body;}protected void start(final Object context) {final Thread t = new Thread(new Runnable() {public void run() {try {body.execute(context);} catch (Exception e) {e.printStackTrace();body.onFailure(context);}body.onSuccess(context);}});t.start();}
}
最后测试一把:
CallBackApp:
package com.cnblogs.yjmyzz.test.callback;/*** Created by jimmy on 8/13/15.*/
public class CallBackApp {public static void main(String[] args) {System.out.println("准备开始执行异步任务...");final Object context = "上下文信息";new CallBackTask(new CallBackBody() {@Overridevoid execute(Object context) throws Exception {System.out.println("\n正在执行耗时操作...");System.out.println(context);Thread.sleep(5000);System.out.println("\n执行完成!");}void onSuccess(Object context) {System.out.println("\n成功后的回调函数...");System.out.println(context);}void onFailure(Object context) {System.out.println("\n失败后的回调函数...");System.out.println(context);}}).start(context);System.out.println("\n异步任务已经开始,请等待完成...");}
}
运行结果:
准备开始执行异步任务...
正在执行耗时操作...
上下文信息
异步任务已经开始,请等待完成...
执行完成!
成功后的回调函数...
上下文信息
转载于:https://www.cnblogs.com/yjmyzz/p/4728770.html
java 中的异步回调相关推荐
- 转:在 .NET 中实现异步回调访问数据库
在 .NET 中实现异步回调访问数据库 时间:2009-11-17 19:52来源:网络收集 作者:佚名 点击: 334 次 技术论坛 某些场合下,在对数据库进行访问时,为了避免同步访问数据时所带来的 ...
- java线程callback,Java线程之异步回调(Callback)
●介绍 有时候执行一个任务需要很长时间,单线程下线程会处于阻塞状态.这个时候我们会考虑一种非阻塞的处理模式.非阻塞任务在任何编程语言里都必不可少,Java也不例外.多线程就是一个很好的解决办法. 但是 ...
- java 微信支付异步回调接口
1.微信支付异步回调接口 @SuppressWarnings("static-access") @RequestMapping("callback") ...
- Java中的异步等待
编写异步代码很困难. 试图了解异步代码应该做什么的难度更大. 承诺是尝试描述延迟执行流程的一种常见方式:首先做一件事,然后再做另一件事,以防万一出错再做其他事情. 在许多语言中,承诺已成为协调异步行为 ...
- JAVA中的异步调用
1.什么是异步调用 异步调用简单理解,就是不阻塞主线程,再开辟另一个线程异步执行 main{//前置语句costTime();//后置语句 } 在上述代码中,主线程按顺序,需要依次执行前置语句,调用c ...
- java 异步返回_在Java中使用异步后,主方法如何返回异步中得到的值?
慕莱坞5435954 我没有研究过 RxJava,不过之前团队里面做 Android 的开发的同事说是很好用.1 楼给了一种使用 Future 的方案,但是很抱歉 Future 是一种异步阻塞式的AP ...
- java中钩子函数回调函数_钩子函数 和回调函数
标签: http://blog.csdn.net/lipeionline/article/details/6369657 转自 也可以这样,更容易理解:回调函数就好像是一个中断处理函数,系统在符合你 ...
- java中钩子函数回调函数_钩子函数和回调函数
一般认为,钩子函数就是回调函数的一种,其实还是有差异的,差异地方就是:触发的时机不同. 先说钩子函数: 钩子(Hook)概念源于Windows的消息处理机制,通过设置钩子,应用程序对所有消息事件进行拦 ...
- Java 异步回调机制实例解析
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调是一种特殊 ...
最新文章
- 【问题记录】服务器部署项目时启动tomcat后报错 HTTP 错误 404.0- Not Found 您要找的资源已被删除、已更名或暂时不可用 解决方案···
- 复位处理详细设计方案
- 神奇的四次方数(洛谷P1679题题解,Java语言描述)
- 项目管理:项目经理要具备的技能
- 疑似小米10系列真机谍照首曝光:挖孔双曲面屏设计无疑
- VMware Workstation 12.5 安装Mac OS X
- [转] MySQL树结构递归查询处理
- Wyn Enterprise 核心功能:易用至极的自助式BI和数据分析工具
- FlashFTP教程
- matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
- 前端知识点——Web Sockets
- 全局gitignore导致的文件被忽略~“The following paths are ignored by one of your .gitignore files.”
- MacBook Air装单独win7
- Leetcode 120. Triangle 三角形问题(动态规划经典) 解题报告
- 从零开始学 Python 之基础篇
- 漫谈数据保护和个人信息加密
- Ubuntu 10.10安装配置指南Ubuntu 11.10 图形安装教程
- 消费管理系统java代码_SSH框架+Mysql数据库开发java web会员积分消费管理系统
- abaqus创建路径_Abaqus后处理的四种路径的应用-技术邻社区
- java swing桌面程序打包成.exe文件
热门文章
- python123平台在线编程_Python程序设计实验报告一:熟悉IDLE和在线编程平台
- php调用jssdk转发_php一个文件搞定微信jssdk配置
- python常用标准库的基本用法_[每天一个python小技巧]Python中标准库OS的常用方法总结...
- 仅需6道题轻松掌握SciPy空间计算基础 | Python技能树征题
- java内存溢出模拟_模拟实战排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)问题...
- linux列出组_如何列出Linux中的所有组?
- c运算符优先级_C运算符
- Android LiveData
- python sys模块_Python sys模块
- Linux平台代码覆盖率测试工具GCOV简介