JAVA實現(xiàn)異步調(diào)用實例代碼
在JAVA平臺,實現(xiàn)異步調(diào)用的角色有如下三個角色:
調(diào)用者 取貨憑證 真實數(shù)據(jù)
一個調(diào)用者在調(diào)用耗時操作,不能立即返回數(shù)據(jù)時,先返回一個取貨憑證.然后在過一斷時間后憑取貨憑證來獲取真正的數(shù)據(jù).
在調(diào)用一個方法的時候,程序會進入被調(diào)用方法體內(nèi),執(zhí)行完這個被調(diào)用方法后,才返回執(zhí)行下一條語句。怎么做到像ajax異步請求一樣,發(fā)送請求后,沒等請求響應(yīng)就執(zhí)行下一條語句呢?對于java的異步請求,找了許多教材都沒有找到,如thinking in java、core java2 ......等等。受多線程下載工具以及mootools的Request的啟發(fā),做了一個java版的Request,不知它的性能如何。
Request:請求載體
public class Request { private RequestContent rc;//請求主體 public Request(RequestContent rc){ this.rc=rc; } protected void start(){ //開始請求 final Thread t=new Thread(new Runnable(){ public void run(){ try{ rc.doSomeThing();//響應(yīng)請求 }catch (Exception e) { e.printStackTrace(); rc.onFailure(); //如果執(zhí)行失敗 } rc.onSuccess();//如果執(zhí)行成功 }} ); t.start(); } }
RequestContent:請求主體
abstract class RequestContent { void onSuccess(){ //執(zhí)行成功的動作。用戶可以覆蓋此方法 System.out.println("onSuccess"); } void onFailure(){ //執(zhí)行失敗的動作。用戶可以覆蓋此方法 System.out.println("onFailure"); } abstract void doSomeThing(); //用戶必須實現(xiàn)這個抽象方法,告訴子線程要做什么 }
Test:測試
new Request(new RequestContent(){ void doSomeThing(){ System.out.println("doSomething"); } void onSuccess(){ System.out.println("override onSuccess"); } }).start();
以上代碼就是小編給大家分享的java實現(xiàn)異步調(diào)用,希望大家喜歡。
相關(guān)文章
Java for-each循環(huán)使用難題2例(高級使用方法)
從Java5起,在Java中有了for-each循環(huán),可以用來循環(huán)遍歷collection和array。For each循環(huán)允許你在無需保持傳統(tǒng)for循環(huán)中的索引,或在使用iterator /ListIterator時無需調(diào)用while循環(huán)中的hasNext()方法就能遍歷collection2014-04-04SpringBoot-RestTemplate如何實現(xiàn)調(diào)用第三方API
這篇文章主要介紹了SpringBoot-RestTemplate實現(xiàn)調(diào)用第三方API的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08springboot+maven多環(huán)境動態(tài)配置及編譯失敗的解決方案(步驟詳解)
這篇文章主要介紹了springboot+maven多環(huán)境動態(tài)配置及編譯失敗的解決方案,本文通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11IntelliJ Idea常用11款插件(提高開發(fā)效率)
這篇文章主要介紹了IntelliJ Idea常用11款插件(提高開發(fā)效率),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-07-07