最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Java 談回調(diào)函數(shù)

 更新時(shí)間:2017年05月22日 23:50:47   投稿:mdxy-dxy  
回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所 指向的函數(shù)時(shí),我們就說這是回調(diào)函數(shù)

雜談

還是習(xí)慣,寫點(diǎn)什么之前,都喜歡來點(diǎn)雜談。

最近都在搞微信的開發(fā),終于在昨晚進(jìn)入測(cè)試階段了,好快就測(cè)出 bug 來,但也好快修復(fù)了。這也讓我更擔(dān)心。

雖說是進(jìn)入內(nèi)測(cè)階段,但那代碼的結(jié)構(gòu)也真太難看了,還得好好重構(gòu)一下。遲點(diǎn)得寫寫關(guān)于這微信公眾號(hào)的開發(fā)文章。下次再詳談。

今天開始了三天半的小長(zhǎng)假,但我還是堅(jiān)守在學(xué)校。有點(diǎn)不知道為了什么。

剛給 wp 裝了個(gè) markdown 插件,爽歪歪!!

在寫這篇文章的時(shí)候,還是用著 wordpress 的,但在發(fā)表的時(shí)候,已經(jīng)換成 hexo 了。原因:沒有找到一個(gè)完美支持 markdown 的插件,越來越覺得 wp 很臃腫,于是,就擁抱了小蘿莉 hexo 了。哈哈。

還有,今天微博看到的一個(gè)很贊的神器 GitBook ,分享一下:

Build beautiful programming books and exercises using GitHub/Git and Markdown.

http://www.gitbook.io/

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

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

回調(diào)函數(shù)就是一個(gè)通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來調(diào)用其所
指向的函數(shù)時(shí),我們就說這是回調(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 就是煮飯的過程,煮好之后,就把結(jié)果(飯菜)返回給主函數(shù)(Ben)。

public class Aunt {

  String str;
  
  public void cookMeal(Callback callback){
    str=" 香噴噴的飯菜來咯 ";  // 這個(gè)就是煮飯的過程
    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);
  }

}

結(jié)果:

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

時(shí)間怎么可以這么浪費(fè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é)果:

總結(jié):

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

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

在代碼中,異步編程的直接體現(xiàn)就是回調(diào)。異步編程依托于回調(diào)來實(shí)現(xiàn),但不能說使用了回調(diào)后程序就異步化了。

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

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

相關(guān)文章

  • java線程池中Worker線程執(zhí)行流程原理解析

    java線程池中Worker線程執(zhí)行流程原理解析

    這篇文章主要為大家介紹了java線程池中Worker線程執(zhí)行流程原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • SpringBoot中配置文件未生效的三種場(chǎng)景解決方法

    SpringBoot中配置文件未生效的三種場(chǎng)景解決方法

    在做 Spring Boot 項(xiàng)目的時(shí)候,遇到了一個(gè)讓人頭疼的問題,明明在 application.yml 里配置了數(shù)據(jù)庫(kù)連接信息,但應(yīng)用啟動(dòng)時(shí)就是讀取不到,一直報(bào)錯(cuò)說找不到配置,下面我們就來看看該如何解決吧
    2026-01-01
  • 基于Java開發(fā)實(shí)現(xiàn)ATM系統(tǒng)

    基于Java開發(fā)實(shí)現(xiàn)ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于Java開發(fā)實(shí)現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java PhantomJs完成html圖片輸出功能

    Java PhantomJs完成html圖片輸出功能

    給大家?guī)硪黄P(guān)于用Java PhantomJs完成html圖片輸出功能的教學(xué)內(nèi)容,有興趣的朋友學(xué)習(xí)參考下吧。
    2017-12-12
  • Java was started but returned exit code=13問題解決案例詳解

    Java was started but returned exit code=13問題解決案例詳解

    這篇文章主要介紹了Java was started but returned exit code=13問題解決案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Java并發(fā)編程之淺談ReentrantLock

    Java并發(fā)編程之淺談ReentrantLock

    今天帶大家學(xué)習(xí)Java并發(fā)編程的相關(guān)知識(shí),文中對(duì)Java ReentrantLock作了非常詳細(xì)的圖文示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • springcloud-gateway整合jwt+jcasbin實(shí)現(xiàn)權(quán)限控制的詳細(xì)過程

    springcloud-gateway整合jwt+jcasbin實(shí)現(xiàn)權(quán)限控制的詳細(xì)過程

    這篇文章主要介紹了springcloud-gateway整合jwt+jcasbin實(shí)現(xiàn)權(quán)限控制,基于springboot+springcloud+nacos的簡(jiǎn)單分布式項(xiàng)目,項(xiàng)目交互采用openFeign框架,單獨(dú)提取出來成為一個(gè)獨(dú)立的model,需要的朋友可以參考下
    2023-02-02
  • 詳解如何在Spring Boot中實(shí)現(xiàn)容錯(cuò)機(jī)制

    詳解如何在Spring Boot中實(shí)現(xiàn)容錯(cuò)機(jī)制

    容錯(cuò)機(jī)制是構(gòu)建健壯和可靠的應(yīng)用程序的重要組成部分,它可以幫助應(yīng)用程序在面對(duì)異?;蚬收蠒r(shí)保持穩(wěn)定運(yùn)行,Spring Boot提供了多種機(jī)制來實(shí)現(xiàn)容錯(cuò),包括異常處理、斷路器、重試和降級(jí)等,本文將介紹如何在Spring Boot中實(shí)現(xiàn)這些容錯(cuò)機(jī)制,需要的朋友可以參考下
    2023-10-10
  • Java實(shí)現(xiàn)將類數(shù)據(jù)逐行寫入CSV文件的方法詳解

    Java實(shí)現(xiàn)將類數(shù)據(jù)逐行寫入CSV文件的方法詳解

    這篇文章主要為大家詳細(xì)介紹了Java如何實(shí)現(xiàn)將類數(shù)據(jù)逐行寫入CSV文件,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,需要的可以借鑒一下
    2022-11-11
  • 詳解SpringIOC容器相關(guān)知識(shí)

    詳解SpringIOC容器相關(guān)知識(shí)

    這篇文章主要記錄自己在狂神說java中的學(xué)習(xí)情況,文章里有自己學(xué)習(xí)的理解和擴(kuò)展,新手難免有理解偏差或者錯(cuò)誤,懇請(qǐng)大佬指正下,需要的朋友可以參考下
    2021-05-05

最新評(píng)論

山东省| 井陉县| 大荔县| 临安市| 神池县| 商都县| 绥阳县| 留坝县| 大同市| 桦甸市| 新昌县| 花莲市| 临颍县| 绥滨县| 繁昌县| 朝阳市| 手机| 瑞昌市| 山西省| 商水县| 麻江县| 湘西| 元阳县| 荃湾区| 黑山县| 华阴市| 共和县| 渭源县| 耿马| 云安县| 十堰市| 广汉市| 梨树县| 松阳县| 平阳县| 香河县| 扶绥县| 嘉荫县| 吉隆县| 子长县| 宁化县|