博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 中的异步回调
阅读量:4519 次
发布时间:2019-06-08

本文共 2248 字,大约阅读时间需要 7 分钟。

异步回调,本来在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() {            @Override            void 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

你可能感兴趣的文章
JS中的Navigator 对象
查看>>
Android 开源控件与常用开发框架开发工具类
查看>>
记录一次网站打开卡--排故障过程
查看>>
第四章小结
查看>>
Windows7下python2.7.6环境变量配置
查看>>
java设计模式------代理模式
查看>>
WPF学习笔记----注释标记,使用自定义资源字典(style)文件的流程
查看>>
元素定位的八大法则
查看>>
Sublime Text 3 使用小记
查看>>
总结Pycharm里面常用的快捷键
查看>>
util.promisify 的那些事儿
查看>>
配置phpstudy+phpstorm+xdebug环境
查看>>
BZOJ 1079 [SCOI2008]着色方案
查看>>
[Win8.1系统]双系统
查看>>
HDU 3899 树形DP
查看>>
获取当前页面url信息
查看>>
Java容器类源码分析前言之集合框架结构(基于JDK8)
查看>>
linux下C/C++程序的内存布局
查看>>
单词计数问题
查看>>
php 魔术方法 __autoload()
查看>>