歡迎您光臨本站 註冊首頁

如何基於回調實現Java的異步調用

←手機掃碼閱讀     f2h0b53ohn @ 2020-07-01 , reply:0

  異步是指調用發出後,調用者不會立刻得到結果,而是在調用發出後,被調用者通知調用者,或通過回調函數處理這個調用。

  回調簡單地說就是B中有一個A,這樣A在調用B的某個方法時實際上是調用到了自己的方法。

  利用回調可以實現Java的異步調用,下面的例子來自網上。

  回調接口: 

  public interface CallBack {     /**      * 執行回調方法      * @param objects  將處理後的結果作為參數返回給回調方法      */     public void execute(Object... objects );   }

 

消息的發送者:

  /**   * 這個類相當於你自己   */  public class Local implements CallBack,Runnable{         private Remote remote;          /**      * 發送出去的消息      */     private String message;          public Local(Remote remote, String message) {       super();       this.remote = remote;       this.message = message;     }        /**      * 發送消息      */     public void sendMessage()     {       /**當前線程的名稱**/       System.out.println(Thread.currentThread().getName());       /**創建一個新的線程發送消息**/       Thread thread = new Thread(this);       thread.start();       /**當前線程繼續執行**/       System.out.println("Message has been sent by Local~!");     }        /**      * 發送消息後的回調函數      */     public void execute(Object... objects ) {       /**打印返回的消息**/       System.out.println(objects[0]);       /**打印發送消息的線程名稱**/       System.out.println(Thread.currentThread().getName());       /**中斷髮送消息的線程**/       Thread.interrupted();     }          public static void main(String[] args)     {       Local local = new Local(new Remote(),"Hello");              local.sendMessage();     }        public void run() {       remote.executeMessage(message, this); //這相當於給同學打電話,打完電話之後,這個線程就可以去做其他事情了,只不過等到你的同學打回電話給你的時候你要做出響應    }   }

 

消息的接收者:

  /**   * 這個類相當於你的同學   */  public class Remote {        /**      * 處理消息      * @param msg  接收的消息      * @param callBack 回調函數處理類      */     public void executeMessage(String msg,CallBack callBack)     {       /**模擬遠程類正在處理其他事情,可能需要花費許多時間**/       for(int i=0;i<1000000000;i++)       {                }       /**處理完其他事情,現在來處理消息**/       System.out.println(msg);       System.out.println("I hava executed the message by Local");       /**執行回調**/       callBack.execute(new String[]{"Nice to meet you~!"}); //這相當於同學執行完之後打電話給你    }        }

這樣就可以基於回調實現異步調用,當消息接受者處理任務完成後去調用消息發送者的方法。

異步調用的類似實現,當圖片加載的比較慢時,可以先加載一張模糊的圖片,當圖片加載完成後再去進行局部的刷新。



[f2h0b53ohn ] 如何基於回調實現Java的異步調用已經有255次圍觀

http://coctec.com/docs/java/show-post-240567.html