回呼函數,顧名思義,用於回呼的函數。回調函數只是一個功能片段,由使用者依照回呼函數呼叫約定來實現的一個函數。回呼函數是一個工作流程的一部分,由工作流程決定函數的呼叫(回呼)時機。
回呼原本應該是一個很簡單的概念,但是可能因為平常只用系統為我們寫好的回調的接口了,自己很少實現回調,所以在自己實現回調的時候還是有一點點暈的,現在寫這篇文章記錄一下,也跟大家分享一下怎麼寫回調介面。
回呼
回呼的概念:舉個例子就是,我們想要問別人一題,我們把題跟對方說了一下,對方說好,等我做完這題,我就告訴你,這個時候就用到了回調,因為我們並不知道對方什麼時候會做完,而是對方做完了來主動找我們。
同步回呼
程式碼運行到某一個位置的時候,如果遇到了需要回呼的程式碼,會在這裡等待,等待回呼結果返回後再繼續執行。
非同步回呼
程式碼執行到需要回呼的程式碼的時候,並不會停下來,而是繼續執行,當然可能過一會回呼的結果會返回回來。
具體程式碼:
整體的程式碼還是很簡單的,就是模擬了一個印表機,還有一個人,印表機有列印的功能,但是列印需要時間,不能在收到任務的同時給予回饋,需要等待一段時間才能給予回饋。這個人想做的就是列印一份履歷,然後知道列印的結果。這裡面程式碼實現了這兩種方式。
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中文網其他相關文章!