异步回调,本来在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 中的异步回调相关推荐

  1. 转:在 .NET 中实现异步回调访问数据库

    在 .NET 中实现异步回调访问数据库 时间:2009-11-17 19:52来源:网络收集 作者:佚名 点击: 334 次 技术论坛 某些场合下,在对数据库进行访问时,为了避免同步访问数据时所带来的 ...

  2. java线程callback,Java线程之异步回调(Callback)

    ●介绍 有时候执行一个任务需要很长时间,单线程下线程会处于阻塞状态.这个时候我们会考虑一种非阻塞的处理模式.非阻塞任务在任何编程语言里都必不可少,Java也不例外.多线程就是一个很好的解决办法. 但是 ...

  3. java 微信支付异步回调接口

    1.微信支付异步回调接口 @SuppressWarnings("static-access")     @RequestMapping("callback") ...

  4. Java中的异步等待

    编写异步代码很困难. 试图了解异步代码应该做什么的难度更大. 承诺是尝试描述延迟执行流程的一种常见方式:首先做一件事,然后再做另一件事,以防万一出错再做其他事情. 在许多语言中,承诺已成为协调异步行为 ...

  5. JAVA中的异步调用

    1.什么是异步调用 异步调用简单理解,就是不阻塞主线程,再开辟另一个线程异步执行 main{//前置语句costTime();//后置语句 } 在上述代码中,主线程按顺序,需要依次执行前置语句,调用c ...

  6. java 异步返回_在Java中使用异步后,主方法如何返回异步中得到的值?

    慕莱坞5435954 我没有研究过 RxJava,不过之前团队里面做 Android 的开发的同事说是很好用.1 楼给了一种使用 Future 的方案,但是很抱歉 Future 是一种异步阻塞式的AP ...

  7. java中钩子函数回调函数_钩子函数 和回调函数

    标签: http://blog.csdn.net/lipeionline/article/details/6369657  转自 也可以这样,更容易理解:回调函数就好像是一个中断处理函数,系统在符合你 ...

  8. java中钩子函数回调函数_钩子函数和回调函数

    一般认为,钩子函数就是回调函数的一种,其实还是有差异的,差异地方就是:触发的时机不同. 先说钩子函数: 钩子(Hook)概念源于Windows的消息处理机制,通过设置钩子,应用程序对所有消息事件进行拦 ...

  9. Java 异步回调机制实例解析

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是回调 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用. 回调是一种特殊 ...

最新文章

  1. 【问题记录】服务器部署项目时启动tomcat后报错 HTTP 错误 404.0- Not Found 您要找的资源已被删除、已更名或暂时不可用 解决方案···
  2. 复位处理详细设计方案
  3. 神奇的四次方数(洛谷P1679题题解,Java语言描述)
  4. 项目管理:项目经理要具备的技能
  5. 疑似小米10系列真机谍照首曝光:挖孔双曲面屏设计无疑
  6. VMware Workstation 12.5 安装Mac OS X
  7. [转] MySQL树结构递归查询处理
  8. Wyn Enterprise 核心功能:易用至极的自助式BI和数据分析工具
  9. FlashFTP教程
  10. matlab画随机信号,(最新整理)随机信号处理基础matlab仿真
  11. 前端知识点——Web Sockets
  12. 全局gitignore导致的文件被忽略~“The following paths are ignored by one of your .gitignore files.”
  13. MacBook Air装单独win7
  14. Leetcode 120. Triangle 三角形问题(动态规划经典) 解题报告
  15. 从零开始学 Python 之基础篇
  16. 漫谈数据保护和个人信息加密
  17. Ubuntu 10.10安装配置指南Ubuntu 11.10 图形安装教程
  18. 消费管理系统java代码_SSH框架+Mysql数据库开发java web会员积分消费管理系统
  19. abaqus创建路径_Abaqus后处理的四种路径的应用-技术邻社区
  20. java swing桌面程序打包成.exe文件

热门文章

  1. python123平台在线编程_Python程序设计实验报告一:熟悉IDLE和在线编程平台
  2. php调用jssdk转发_php一个文件搞定微信jssdk配置
  3. python常用标准库的基本用法_[每天一个python小技巧]Python中标准库OS的常用方法总结...
  4. 仅需6道题轻松掌握SciPy空间计算基础 | Python技能树征题
  5. java内存溢出模拟_模拟实战排查堆内存溢出(java.lang.OutOfMemoryError: Java heap space)问题...
  6. linux列出组_如何列出Linux中的所有组?
  7. c运算符优先级_C运算符
  8. Android LiveData
  9. python sys模块_Python sys模块
  10. Linux平台代码覆盖率测试工具GCOV简介