中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Java項目中異步調用接口

發布時間:2021-03-09 16:19:23 來源:億速云 閱讀:474 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關如何在Java項目中異步調用接口,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

什么是異步調用?

我的理解就是在方法A中調用方法B,但是方法B很耗時,如果是同步調用的話會等方法B執行完成后才往下執行,如果異步的話就是我調用了方法B,它給我個返回值證明它已接受調用,但是它并沒有完成任務,而我就繼續往下執行。可能有表達不當的地方,歡迎指正。

再用一個生活中的例子吧:

異步調用就是你 喊 你朋友吃飯 ,你朋友說知道了 ,待會忙完去找你 ,你就去做別的了。
同步調用就是你 喊 你朋友吃飯 ,你朋友在忙 ,你就一直在那等,等你朋友忙完了 ,你們一起去。

異步調用有哪些角色?

  • 調用者

  • 取貨憑證

  • 真實數據

一個調用者在調用耗時操作,不能立即返回數據時,先返回一個取貨憑證.然后在過一斷時間后憑取貨憑證來獲取真正的數據.

異步調用的例子

連結調用者和真實數據之間的橋梁是取貨憑證.我們先來看它的實現:

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模擬的異步操作。

看完上述內容,你們對如何在Java項目中異步調用接口有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田阳县| 江门市| 吴江市| 柳江县| 清流县| 米脂县| 重庆市| 望城县| 镇安县| 芮城县| 广丰县| 岳池县| 吴堡县| 正宁县| 临漳县| 孙吴县| 永修县| 樟树市| 临沭县| 海盐县| 阜南县| 清水河县| 永春县| 大丰市| 上虞市| 乾安县| 阿城市| 同德县| 濉溪县| 五家渠市| 北碚区| 饶河县| 屏山县| 枞阳县| 仲巴县| 昭觉县| 赤峰市| 竹山县| 紫阳县| 民丰县| 三门峡市|