异步回调,本来在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异步任务已经开始,请等待完成...");
}
}
运行结果:
准备开始执行异步任务... 正在执行耗时操作... 上下文信息 异步任务已经开始,请等待完成... 执行完成! 成功后的回调函数... 上下文信息
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有