回調(diào)函數(shù)躯嫉,異步函數(shù)

正題纱烘,談回調(diào)函數(shù) (Callback)

解釋(引用于百度百科):

回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù)祈餐,當(dāng)這個(gè)指針被用來(lái)調(diào)用其所
指向的函數(shù)時(shí)擂啥,我們就說(shuō)這是回調(diào)函數(shù)》簦回調(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用哺壶,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)
用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)蜒谤。

機(jī)制(引用于百度百科):

⑴定義一個(gè)回調(diào)函數(shù)变骡;

⑵提供函數(shù)實(shí)現(xiàn)的一方在初始化的時(shí)候,將回調(diào)函數(shù)的函數(shù)指針注冊(cè)給調(diào)用者芭逝;

⑶當(dāng)特定的事件或條件發(fā)生的時(shí)候,調(diào)用者使用函數(shù)指針調(diào)用回調(diào)函數(shù)對(duì)事件進(jìn)行處理渊胸。

意義(個(gè)人理解):

調(diào)用者和被調(diào)用者的關(guān)系簡(jiǎn)單化旬盯,互相不用關(guān)心對(duì)方的邏輯處理,不用關(guān)系對(duì)方都程序是怎么的翎猛,只關(guān)系返回值胖翰,這種基于返回值
的機(jī)制很好地使兩者的關(guān)系簡(jiǎn)單,明了切厘。

上代碼萨咳,以下講述阿 Ben 去飯?zhí)贸燥埖墓适?/p>

接口 Callback

接口定義事情 Done 了之后應(yīng)該做些什么

public interface Callback {

public void Done(String str);

}

Ben 類

阿 Ben 餓了,于是要去 have lunch疫稿,他叫了 Aunt 幫他煮個(gè)飯培他,調(diào)用 Aunt 的 cookMeal 方法鹃两,于是 Aunt 就去煮了,至于怎么煮舀凛,Ben 就不用管了俊扳,只要煮好了,就調(diào)用 Done猛遍,給飯阿 Ben 吃就可以了馋记。

public class Ben implements Callback {

public void havelunch(Aunt aunt){

aunt.cookMeal(``this``);

}

@Override

public void Done(String str) {

System.out.println(str);

}

}

Aunt 類

賦值給 str 就是煮飯的過(guò)程,煮好之后懊烤,就把結(jié)果(飯菜)返回給主函數(shù)(Ben)梯醒。

public class Aunt {

String str;

public void cookMeal(Callback callback){

str=``" 香噴噴的飯菜來(lái)咯 "``; // 這個(gè)就是煮飯的過(guò)程

callback.Done(str);

}

}

測(cè)試類

public class test {

/**

* @param args

*/

public static void main(String[] args) {

Aunt class2=``new Aunt();

Ben class1=``new Ben();

class1.havelunch(class2);

}

}

剛才阿姨在煮飯的時(shí)候,阿 Ben 是傻乎乎地站在那里等腌紧,等同于是在陪阿姨做飯茸习,這個(gè)就是同步回調(diào)。

時(shí)間怎么可以這么浪費(fèi)的呢寄啼。下面來(lái)看看異步回調(diào)逮光。

異步回調(diào)

這個(gè)時(shí)候,阿姨還是規(guī)規(guī)矩矩地做飯墩划。而啊 Ben涕刚,得同時(shí)做點(diǎn)事情。所以只需要修改 Ben 類乙帮。

public class Ben implements Callback {

public void havelunch(``final Aunt aunt){

new Thread(``new Runnable() { //new 一個(gè)新的線程去做這個(gè)事情杜漠,并等待返回結(jié)果

@Override

public void run() {

aunt.cookMeal(Ben.``this``);

}

}).start();

play(); // 在阿姨做飯的時(shí)候可以玩一會(huì)手機(jī)先嘛。就不用傻傻地等了察净,阿姨煮好飯會(huì)喊吃的了驾茴。

}

public void play(){

System.out.println(``" 玩手機(jī),刷微博氢卡,朋友圈锈至,聊扣扣 "``);

}

@Override

public void Done(String str) {

System.out.println(str);

}

}

總結(jié):

回調(diào)函數(shù)就是那么一回事。

今天在一篇 nodejs 的文章看到了一句話是這么說(shuō)的:

在代碼中译秦,異步編程的直接體現(xiàn)就是回調(diào)峡捡。異步編程依托于回調(diào)來(lái)實(shí)現(xiàn),但不能說(shuō)使用了回調(diào)后程序就異步化了筑悴。

說(shuō)的不就是這個(gè)道理么们拙。呵呵。

以上是我個(gè)人的理解阁吝,如有錯(cuò)誤砚婆,望指出。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末突勇,一起剝皮案震驚了整個(gè)濱河市装盯,隨后出現(xiàn)的幾起案子坷虑,更是在濱河造成了極大的恐慌,老刑警劉巖验夯,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件猖吴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挥转,警方通過(guò)查閱死者的電腦和手機(jī)海蔽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绑谣,“玉大人党窜,你說(shuō)我怎么就攤上這事〗柘” “怎么了幌衣?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)壤玫。 經(jīng)常有香客問(wèn)我豁护,道長(zhǎng),這世上最難降的妖魔是什么欲间? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任楚里,我火速辦了婚禮,結(jié)果婚禮上猎贴,老公的妹妹穿的比我還像新娘班缎。我一直安慰自己,他們只是感情好她渴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布达址。 她就那樣靜靜地躺著,像睡著了一般趁耗。 火紅的嫁衣襯著肌膚如雪沉唠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,328評(píng)論 1 310
  • 那天苛败,我揣著相機(jī)與錄音右冻,去河邊找鬼。 笑死著拭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牍帚。 我是一名探鬼主播儡遮,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼暗赶!你這毒婦竟也來(lái)了鄙币?” 一聲冷哼從身側(cè)響起肃叶,我...
    開(kāi)封第一講書(shū)人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎十嘿,沒(méi)想到半個(gè)月后因惭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绩衷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年蹦魔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咳燕。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡勿决,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出招盲,到底是詐尸還是另有隱情低缩,我是刑警寧澤,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布曹货,位于F島的核電站咆繁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏顶籽。R本人自食惡果不足惜玩般,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜕衡。 院中可真熱鬧壤短,春花似錦、人聲如沸慨仿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)镰吆。三九已至帘撰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間万皿,已是汗流浹背摧找。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牢硅,地道東北人蹬耘。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像减余,于是被迫代替她去往敵國(guó)和親综苔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載請(qǐng)注明出處(http://www.reibang.com/p/5f538820e370),您的打賞是小編繼續(xù)...
    福later閱讀 27,264評(píng)論 8 71
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,417評(píng)論 8 265
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)如筛,斷路器堡牡,智...
    卡卡羅2017閱讀 134,702評(píng)論 18 139
  • 吃過(guò)早飯,明收拾好書(shū)包杨刨,明爸送他去學(xué)書(shū)法晤柄,臨走時(shí),對(duì)我說(shuō):“媽媽妖胀,讓我爸早點(diǎn)去接我:”芥颈,好,快走吧做粤,快到點(diǎn)了浇借,明拿...
    來(lái)昊明閱讀 181評(píng)論 0 1
  • 我們是不是一直在追求一種穩(wěn)態(tài)? 總是希望用某種方式把自己安定下來(lái)怕品,人類自始至終在做的就是這件事妇垢。 采集-放牧-農(nóng)耕...
    勝過(guò)安慰閱讀 276評(píng)論 0 1