回调函数—Java实现
生活随笔
收集整理的這篇文章主要介紹了
回调函数—Java实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 回調函數的概念
- 同步調用
- 一種阻塞式調用,調用方要等待對方執行完畢才返回,它是一種單向調用
- 異步調用
- 一種類似于消息或者時間的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方。
- 回調
- 一種雙向調用模式,被調用方在接口被調用時也會調用對方的接口
2 回調函數的demo
手機購買商品正常下單付款后,會反饋給用戶一個扣款成功的提醒
2.1 同步回調
//自定義Callback接口 package demo;public interface Callback {public void process(String msg); } //實現Callback接口的實現類 package demo;public class MyCallback implements Callback{@Overridepublic void process(String msg) {System.out.println("回調:" + msg);} } //客戶端 package demo;public class User {private String name;private App app;public User(String name, App app){this.name = name;this.app = app;}public void buy(String thing){System.out.println("用戶端:購買" + thing);app.order(new MyCallback(), thing); //被調用方的接口System.out.println("用戶端:物品購買中,請耐心等待");} } //服務端 package demo;public class App {public void order(Callback callback, String thing){//模擬工作System.out.println();try {System.out.println("服務端:" + thing + "下單中......");Thread.sleep(5000); //模型下單處理} catch (InterruptedException e) {e.printStackTrace();}//回調操作,反饋信息System.out.println();callback.process("扣款成功");} } //測試 package demo;public class Test {public static void main(String[] args) {App app = new App();User mx = new User("mx", app);mx.buy("可樂");} } //執行結果 用戶端:購買可樂服務端:可樂下單中......回調:扣款成功 用戶端:物品購買中,請耐心等待其實這里可以發現,由于程序是同步運行的,所以用戶端:物品購買中,請耐心等待該執行邏輯放在了最后,但實際上是不符合常理的。在用戶確認購買后就應該執行,而不是扣完錢還要讓用戶等待。現采用異步回調修改上述User的代碼。
2.2 異步回調
package demo;public class User {private String name;private App app;public User(String name, App app){this.name = name;this.app = app;}public void buy(String thing){System.out.println("用戶端:購買" + thing);new Thread(new Runnable() {@Overridepublic void run() {app.order(new MyCallback(), thing);}}).start();System.out.println("用戶端:物品購買中,請耐心等待");} } //執行結果 用戶端:購買可樂 用戶端:物品購買中,請耐心等待服務端:可樂下單中......回調:扣款成功總結
以上是生活随笔為你收集整理的回调函数—Java实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 怎么禁止遍历目录,linux
- 下一篇: java 银行存取款_用Java编写银行