java異步實現

java異步實現

一、同步和異步解釋
二、定義回調接口
三、定義異步實現類
四、測試類

一、同步和異步解釋

同步:就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。
     也就是說代碼從頭到尾執行,前面的代碼沒執行完後面的無法執行。
     例如:一條水管,水管內有東西塞住,就會無法通水,或水流很慢。
     所以同步會出現卡頓現象。
異步:異步與同步相對,當一個異步過程調用發出後,調用者在沒有得到結果之前,
     就可以繼續執行後續操作。
     也就是說無論異步方法執行代碼需要多長時間,跟主線程沒有任何影響,
     主線程可以繼續向下執行。

     例如:一條有分叉的水管,分叉口就是異步調用入口。
     A口爲主線程,B口爲輔助線程,當B口有東西塞住,並不影響A口通水。

異步大概如下圖:
這裏寫圖片描述

二、定義回調接口

異步代碼執行完後,結果往往需要一些做一些處理,
所以定義一個接口,用來處理異步結果。

/**
 * 定義回調接口
 * @author YZQ
 *
 */
public interface MyCallback {

    /**
     * 定義處理回調方法
     * @param object
     */
    void callback(Object object);
}

三、定義異步實現類


/**
 * 異步任務類
 * @author YZQ
 *
 */
public class AsynTask {

    /**
     * 處理任務
     * @param myCallback 處理完任務後的回調
     */
    public void task(final MyCallback myCallback){
        Thread thread=new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    //線程睡眠3秒,模擬該線程執行時間過長,也就是上面說的【B口有東西塞住】
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //完成0到99的累加
                int sum=0;
                for(int i=0;i<100;i++){
                    sum+=i;
                }
                //將結果交給接口的實現類取處理
                myCallback.callback(sum);
            }
        });
        //啓動線程
        thread.start();
    }
}

四、測試類


/**
 * 測試類
 * @author YZQ
 *
 */
public class Test {

    public static void main(String[] args) {
        //調用異步任務
        new AsynTask().task(new MyCallback() {
            //實現回調方法
            @Override
            public void callback(Object object) {
                System.out.println("異步回調處理:值 "+object);
            }
        });

        System.out.println("主線程等待異步輸出");
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

運行結果:
這裏寫圖片描述

可以看出:
主線程先輸出了【主線程等待異步輸出】,
隨後輔助線程輸出【異步回調處理:值 4950】。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章