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