异步回调,本来在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异步任务已经开始,请等待完成..."); } }
运行结果:
准备开始执行异步任务...
正在执行耗时操作...
上下文信息
异步任务已经开始,请等待完成...
执行完成!
成功后的回调函数...
上下文信息
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得
100積分直接送
付費(fèi)專(zhuān)欄免費(fèi)學(xué)
大額優(yōu)惠券免費(fèi)領(lǐng)