首頁 > Java > java教程 > 主體

Java回呼的原理實作程式碼分享(圖)

黄舟
發布: 2017-03-31 10:40:07
原創
1492 人瀏覽過

回呼函數,顧名思義,用於回呼的函數。回調函數只是一個功能片段,由使用者依照回呼函數呼叫約定來實現的一個函數。回呼函數是一個工作流程的一部分,由工作流程決定函數的呼叫(回呼)時機。

回呼原本應該是一個很簡單的概念,但是可能因為平常只用系統為我們寫好的回調的接口了,自己很少實現回調,所以在自己實現回調的時候還是有一點點暈的,現在寫這篇文章記錄一下,也跟大家分享一下怎麼寫回調介面。

回呼

回呼的概念:舉個例子就是,我們想要問別人一題,我們把題跟對方說了一下,對方說好,等我做完這題,我就告訴你,這個時候就用到了回調,因為我們並不知道對方什麼時候會做完,而是對方做完了來主動找我們。

同步回呼

程式碼運行到某一個位置的時候,如果遇到了需要回呼的程式碼,會在這裡等待,等待回呼結果返回後再繼續執行。

非同步回呼

程式碼執行到需要回呼的程式碼的時候,並不會停下來,而是繼續執行,當然可能過一會回呼的結果會返回回來。

具體程式碼:

整體的程式碼還是很簡單的,就是模擬了一個印表機,還有一個人,印表機有列印的功能,但是列印需要時間,不能在收到任務的同時給予回饋,需要等待一段時間才能給予回饋。這個人想做的就是列印一份履歷,然後知道列印的結果。這裡面程式碼實現了這兩種方式。

Callback.java

public interface Callback {
  void printFinished(String msg);
}
登入後複製

Printer.java

public class Printer {
  public void print(Callback callback, String text) {
    System.out.println("正在打印 . . . ");
    try {
      Thread.currentThread();
      Thread.sleep(3000);// 毫秒
    } catch (Exception e) {
    }
    callback.printFinished("打印完成");
  }
}
登入後複製

People.java

public class People {

  Printer printer = new Printer();

  /*
   * 同步回调
   */
  public void goToPrintSyn(Callback callback, String text) {
    printer.print(callback, text);
  }

  /*
   * 异步回调
   */
  public void goToPrintASyn(Callback callback, String text) {
    new Thread(new Runnable() {
      public void run() {
        printer.print(callback, text);
      }
    }).start();
  }
}
登入後複製

Main.java

public class Main {//测试类,同步回调
  public static void main(String[] args) {
    People people = new People();
    Callback callback = new Callback() {
      @Override
      public void printFinished(String msg) {
        System.out.println("打印机告诉我的消息是 ---> " + msg);
      }
    };
    System.out.println("需要打印的内容是 ---> " + "打印一份简历");
    people.goToPrintSyn(callback, "打印一份简历");
    System.out.println("我在等待 打印机 给我反馈");
  }
}
登入後複製

Main.java

public class Main {//异步回调
  public static void main(String[] args) {
    People people = new People();
    Callback callback = new Callback() {
      @Override
      public void printFinished(String msg) {
        System.out.println("打印机告诉我的消息是 ---> " + msg);
      }
    };
    System.out.println("需要打印的内容是 ---> " + "打印一份简历");
    people.goToPrintASyn(callback, "打印一份简历");
    System.out.println("我在等待 打印机 给我反馈");
  }
}
登入後複製

#

以上是Java回呼的原理實作程式碼分享(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板