文章出處
文章列表
異步回調,本來在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異步任務已經開始,請等待完成..."); } }
運行結果:
準備開始執行異步任務...
正在執行耗時操作...
上下文信息
異步任務已經開始,請等待完成...
執行完成!
成功后的回調函數...
上下文信息
文章列表
全站熱搜