JAVA實(shí)現(xiàn)異步調(diào)用實(shí)例代碼
在JAVA平臺(tái),實(shí)現(xiàn)異步調(diào)用的角色有如下三個(gè)角色:
調(diào)用者 取貨憑證 真實(shí)數(shù)據(jù)
一個(gè)調(diào)用者在調(diào)用耗時(shí)操作,不能立即返回?cái)?shù)據(jù)時(shí),先返回一個(gè)取貨憑證.然后在過(guò)一斷時(shí)間后憑取貨憑證來(lái)獲取真正的數(shù)據(jù).
在調(diào)用一個(gè)方法的時(shí)候,程序會(huì)進(jìn)入被調(diào)用方法體內(nèi),執(zhí)行完這個(gè)被調(diào)用方法后,才返回執(zhí)行下一條語(yǔ)句。怎么做到像ajax異步請(qǐng)求一樣,發(fā)送請(qǐng)求后,沒(méi)等請(qǐng)求響應(yīng)就執(zhí)行下一條語(yǔ)句呢?對(duì)于java的異步請(qǐng)求,找了許多教材都沒(méi)有找到,如thinking in java、core java2 ......等等。受多線程下載工具以及mootools的Request的啟發(fā),做了一個(gè)java版的Request,不知它的性能如何。
Request:請(qǐng)求載體
public class Request {
private RequestContent rc;//請(qǐng)求主體
public Request(RequestContent rc){
this.rc=rc;
}
protected void start(){ //開(kāi)始請(qǐng)求
final Thread t=new Thread(new Runnable(){
public void run(){
try{
rc.doSomeThing();//響應(yīng)請(qǐng)求
}catch (Exception e) {
e.printStackTrace();
rc.onFailure(); //如果執(zhí)行失敗
}
rc.onSuccess();//如果執(zhí)行成功
}}
);
t.start();
}
}
RequestContent:請(qǐng)求主體
abstract class RequestContent {
void onSuccess(){ //執(zhí)行成功的動(dòng)作。用戶可以覆蓋此方法
System.out.println("onSuccess");
}
void onFailure(){ //執(zhí)行失敗的動(dòng)作。用戶可以覆蓋此方法
System.out.println("onFailure");
}
abstract void doSomeThing(); //用戶必須實(shí)現(xiàn)這個(gè)抽象方法,告訴子線程要做什么
}
Test:測(cè)試
new Request(new RequestContent(){
void doSomeThing(){
System.out.println("doSomething");
}
void onSuccess(){
System.out.println("override onSuccess");
}
}).start();
以上代碼就是小編給大家分享的java實(shí)現(xiàn)異步調(diào)用,希望大家喜歡。
相關(guān)文章
idea如何debug看springsecurity的過(guò)濾器順序
這篇文章主要介紹了idea如何debug看springsecurity的過(guò)濾器順序,文中通過(guò)圖文結(jié)合的方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04
Java多線程循環(huán)柵欄CyclicBarrier正確使用方法
這篇文章主要介紹了Java多線程循環(huán)柵欄CyclicBarrier正確使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Bean的自動(dòng)注入及循環(huán)依賴問(wèn)題
本文詳細(xì)介紹了Bean的自動(dòng)注入及循環(huán)依賴,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)有一定的研究?jī)r(jià)值,感興趣的小伙伴可以閱讀參考2023-03-03
smslib發(fā)短信實(shí)例代碼(電腦發(fā)短信)
smslib發(fā)短信實(shí)例,大家可以參考使用開(kāi)發(fā)自己的程序2013-12-12
Springboot攔截器如何獲取@RequestBody參數(shù)
這篇文章主要介紹了Springboot攔截器如何獲取@RequestBody參數(shù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
springboot?注解方式批量插入數(shù)據(jù)的實(shí)現(xiàn)
一次請(qǐng)求需要往數(shù)據(jù)庫(kù)插入多條數(shù)據(jù)時(shí),可以節(jié)省大量時(shí)間,本文主要介紹了springboot?注解方式批量插入數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
java中Class類(lèi)的基礎(chǔ)知識(shí)點(diǎn)及實(shí)例
在本篇文章里小編給大家分享了關(guān)于java中Class類(lèi)的基礎(chǔ)知識(shí)點(diǎn)及實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-05-05

