异步回调,本来在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. html复选框位置,html – 对齐复选框和标签
  2. 收发机中数字中频的设计
  3. 配置JDK时发生'javac'不是内部或外部命令的现象与解决过程
  4. 3.2 神经网络概述-机器学习笔记-斯坦福吴恩达教授
  5. JavaScript实现hamiltonianCycle哈密尔顿图算法(附完整源码)
  6. Logger对象父子关系
  7. C++工作笔记-设计普通类的格式,实现简单工厂中接口的定义
  8. SCVMM2012 SP1 之虚拟机克隆
  9. 01-maven build项目
  10. 惠普服务器查看主板型号,win10惠普主板型号查看图文教程
  11. oracle查询表的意思,Oracle表的查询(一)
  12. 树莓派SSH脚本自动将攻击IP加入黑名单
  13. polkit启动失败_Linux MySQL 常见无法启动或启动异常的解决方案
  14. 华硕天选笔记本电脑能上网但浏览器打不开
  15. 怎么关闭计算机安全,电脑中安全防护怎么关闭
  16. 微信视频号头像怎么换?怎么设置?必看!5个思路帮你快速敲定头像
  17. 英语3500词(19/20)education主题(2022.4.29)
  18. 基于zxing的彩色二维码生成与解析
  19. 一次 WebResource.axd 异常处理经历
  20. 短视频无尽流前端开发指南

热门文章

  1. busybox linux内核,使用busybox创建精简linux内核实例
  2. centos卸载不必要的程序_新手教程:从Mac上的启动台Launchpad删除应用程序
  3. Python字符串转换为小写字母– str.lower()
  4. java抽象类_Java抽象类
  5. 输出文件名,用i迭代的时候的方法
  6. 打开word时总是弹出The resource dll can not be loaded
  7. 机器人技术与人工智能有什么区别?
  8. 使用代码对现实世界进行抽象,软件设计和思维。
  9. 关于position定位的总结
  10. 让apache支持ssl