您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何在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項目中異步調用接口有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。