摘要:接口調(diào)用從調(diào)用方式上可以分為類同步調(diào)用,異步調(diào)用,回調(diào)同步調(diào)用基本不用說了,它是一種阻塞式的調(diào)用,就是方法中直接調(diào)用方法,從上往下依次執(zhí)行。今天來說說異步調(diào)用。
java接口調(diào)用從調(diào)用方式上可以分為3類:同步調(diào)用,異步調(diào)用,回調(diào);同步調(diào)用基本不用說了,它是一種阻塞式的調(diào)用,就是A方法中直接調(diào)用方法B,從上往下依次執(zhí)行。今天來說說異步調(diào)用。
什么是異步調(diào)用?我的理解就是在方法A中調(diào)用方法B,但是方法B很耗時,如果是同步調(diào)用的話會等方法B執(zhí)行完成后才往下執(zhí)行,如果異步的話就是我調(diào)用了方法B,它給我個返回值證明它已接受調(diào)用,但是它并沒有完成任務,而我就繼續(xù)往下執(zhí)行。可能有表達不當?shù)牡胤?,歡迎指正。
再用一個生活中的例子吧:
異步調(diào)用就是你 喊 你朋友吃飯 ,你朋友說知道了 ,待會忙完去找你 ,你就去做別的了。
同步調(diào)用就是你 喊 你朋友吃飯 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了 ,你們一起去。
調(diào)用者
取貨憑證
真實數(shù)據(jù)
一個調(diào)用者在調(diào)用耗時操作,不能立即返回數(shù)據(jù)時,先返回一個取貨憑證.然后在過一斷時間后憑取貨憑證來獲取真正的數(shù)據(jù).
異步調(diào)用的例子(以下取自http://blog.csdn.net/dlutbruc...)連結(jié)調(diào)用者和真實數(shù)據(jù)之間的橋梁是取貨憑證.我們先來看它的實現(xiàn):
public class FutureTicket{
private Object data = null;
private boolean completed = false;
public synchronized void makeRealData(){
if(this.complited) return;
//獲取數(shù)據(jù)的耗時操作.這里用Sleep代替
try{
Thread.sleep(10000);
}catch(Throwable t){}
this.data = "返回的數(shù)據(jù)內(nèi)容";
this.completed = true;
notifyAll();
}
public synchronized Object getData(){
while(!this.completed)){
try{
wait();
}catch(Throwable t){}
}
return this.data;
}
public boolean isCompleted(){
return this.completed;
}
}
為了簡單化說明(不把它們的關(guān)系開得復雜),這里用Objectb代替了真實數(shù)據(jù).而真實的實現(xiàn)中我們應該把makeData放在一個真實數(shù)據(jù)的類中,然后提供一個方法返回真實數(shù)據(jù).這樣對于真實數(shù)據(jù)的處理和取貨憑證解耦.
對于這個取貨憑證,調(diào)用者的如何調(diào)用是異步調(diào)用的關(guān)鍵:
publc class Requester{
public FutureTicket request(){
final FutureTicket ft = new FutureTicket();
//在新線程中調(diào)用耗時操作
new Thread(){
public void run(){
ft.makeRealData();
}
}.start();
return ft;
}
}
在新線程中啟動耗時操作后,不等待線程的完成立即返回提貨單.
然后調(diào)用者可以根據(jù)ft.isCompleted()來調(diào)用getData()獲取真實數(shù)據(jù).當然對ft.isCompleted()測試可以按規(guī)定時間間隔輪巡(極低級的方案),也可以在條件不滿足時wait(),然后等待makeData的notifyAll();這樣你就完成了一個用JAVA模擬的異步操作.鏈接中還有后續(xù)改進操作,但本文只想闡述什么是異步調(diào)用,所以不加以展示,有興趣的可以訪問該鏈接。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67739.html
摘要:中使用了提供的原生接口對自身的異步化做了改進??梢灾С趾蛢煞N調(diào)用方式。實戰(zhàn)通過下面的例子,可以看出的最大好處特性。 showImg(https://segmentfault.com/img/remote/1460000020032427?w=1240&h=655); 前段時間工作上比較忙,這篇文章一直沒來得及寫,本文是閱讀《Java8實戰(zhàn)》的時候,了解到Java 8里已經(jīng)提供了一個異步...
摘要:下面說的是接口回調(diào)的理解,比較常用什么是回調(diào)函數(shù)有些庫函數(shù)要求應用先傳給它一個函數(shù),在合適的時候調(diào)用,以完成目標任務。 接口回調(diào)機制 網(wǎng)上有一篇挺形象的例子 https://www.cnblogs.com/heshu... java中的回調(diào)我認為分為,同步回調(diào),異步回調(diào)回調(diào):其實就是,A調(diào)用B,B也調(diào)用A,同步回調(diào):就是一種阻塞調(diào)用,A調(diào)用B的方法,等待B執(zhí)行完,A才繼續(xù)異步回調(diào):類...
摘要:異步調(diào)用異步調(diào)用是為了解決同步調(diào)用可能出現(xiàn)阻塞,導致整個流程卡住而產(chǎn)生的一種調(diào)用方式?;卣{(diào)是一種思想是一種機制,至于具體如何實現(xiàn),如何通過代碼將回調(diào)實現(xiàn)得優(yōu)雅實現(xiàn)得可擴展性比較高,一看開發(fā)者的個人水平,二看開發(fā)者對業(yè)務的理解程度。 模塊間調(diào)用在一個應用系統(tǒng)中,無論使用何種語言開發(fā),必然存在模塊之間的調(diào)用,調(diào)用的方式分為幾種: (1)同步調(diào)用 showImg(https://segmen...
摘要:簡介是一個軟件框架用來進行可擴展且跨語言的服務的開發(fā)它結(jié)合了功能強大的軟件堆棧和代碼生成引擎以構(gòu)建在這些編程語言間無縫結(jié)合的高效的服務官網(wǎng)地址安裝的安裝比較簡單在下可以直接使用快速安裝或可以通過官網(wǎng)下載這里就不再多說了當下載安裝完畢后我們就 簡介 thrift是一個軟件框架, 用來進行可擴展且跨語言的服務的開發(fā). 它結(jié)合了功能強大的軟件堆棧和代碼生成引擎, 以構(gòu)建在 C++, Java...
摘要:回調(diào)函數(shù)異步回調(diào)簡明講解敘言異步回調(diào)常用于某些業(yè)務需要很長時間處理,但是又需要立刻返回結(jié)果,這種情況都需要開辟線程獨立處理需要長時間多的業(yè)務,也無處理完了,回調(diào)回調(diào)函數(shù),再去處理與之有關(guān)的需要在該業(yè)務之后處理的業(yè)務。 java回調(diào)函數(shù)-異步回調(diào)-簡明講解 敘言: 異步回調(diào)常用于某些業(yè)務需要很長時間處理,但是又需要立刻返回結(jié)果,這種情況都需要開辟線程獨立處理需要長時間多的業(yè)務,也無處理...
閱讀 2568·2021-11-22 12:05
閱讀 3454·2021-10-14 09:42
閱讀 1687·2021-07-28 00:15
閱讀 1990·2019-08-30 11:08
閱讀 1487·2019-08-29 17:31
閱讀 932·2019-08-29 16:42
閱讀 2340·2019-08-26 11:55
閱讀 2119·2019-08-26 11:49