java回撥函式-非同步回撥-簡明講解

低調的碼楓發表於2019-01-19

java回撥函式-非同步回撥-簡明講解

敘言:
非同步回撥常用於某些業務需要很長時間處理,但是又需要立刻返回結果,這種情況都需要開闢執行緒獨立處理需要長時間多的業務,也無處理完了,回撥回撥函式,再去處理與之有關的需要在該業務之後處理的業務。
之前看到網上說的回撥,雖然有很多說明,但是還是不太好理解,而且比較繁複,個人感覺做的說明並不實用,故而才有了寫這篇文的想法,希望拙見能夠幫助到看此文的你。

1、網上有很多回撥例子,對於同步回撥,這裡就不細說了,就是在我這個非同步回撥的基礎上把執行緒去掉就行了。
2、網上說回撥函式的時候,很多都是寫兩個類,一個介面,有些雖然沒有介面,但是還是兩個類,基本上都是使用兩個不同的類來做說明的,其實沒有必要,當我們需要用非同步回撥的時候,再去建立一個類,甚至一個介面,還需要例項化物件去呼叫方法,這種方式並不太實用。
3、我這裡就是在一個類裡處理完所有的回撥過程,需要呼叫非同步的時候,再原來程式碼的基礎上新增一個執行緒呼叫需要時間處理的業務方法,再寫一個方法(回撥函式),用於當需要時間處理的那個業務處理完之後,去完成之後的業務。還需要一個方法,這個方法就是用來處理需要長時間處理的業務的。其實就是在主執行緒的基礎上再開一個執行緒,相當於在原來程式碼的基礎上新增三個方法就能完成非同步回撥。
4、下面就是我的程式碼,這裡用main測試的,所以方法都是static修飾的靜態方法。

 public class CallBack {
                public static void meNeed() {
                //開啟執行緒--->點外買
                new Thread(new Runnable() {
                    
                    @Override
                    public void run() {
                        //帶什麼外賣
                        String food = "你好,請幫點一份蛋炒飯蓋飯,要辣,不要麻,要放雞精,不放味精,鹽要低鈉鹽,還要多放點蔥花";
                        //下單
                        takeouts(food);
                        
                    }
                }).start();
                
                
                //玩遊戲去
                playGames();
            }
        
            /**
             * @throws @Description:點完外賣,我就去玩遊戲去了
             */
            public static void playGames() {
                System.err.println("我玩遊戲去了");
            }
        
            /**
             * @throws @Description:外賣送到門外,敲門提示我外賣到了,叫我去拿外賣----這個方法就是所謂的--->回撥函式
             */
            public static void callback(String message) {
                //這裡就是需要等待之後才能進行的後續業務邏輯
                System.err.println(message);
            }
        
            /**
             * @throws @Description:
             * @param help
             */
            public static void takeouts(String food) {
                // 模擬帶外賣需要的時間
                for (int i = 0; i < 10000; i++) {
                    for (int j = 0; j < 100; j++) {
                        for (int k = 0; k < 10000; k++) {
                            for (int l = 0; l < 100; l++) {
        
                            }
                        }
                    }
                }
                // 外賣送到了門口,敲門
                String message = "你的外賣到了";
                callback(message);
            }
            
            //測試回撥
            public static void main(String[] args) {
                meNeed();
            }
        }    
        
     


              

 

     

相關文章