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