中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java異步編程之Callbacks與Futures模型怎么調用

發布時間:2023-03-25 11:47:28 來源:億速云 閱讀:93 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Java異步編程之Callbacks與Futures模型怎么調用”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java異步編程之Callbacks與Futures模型怎么調用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

    一、Callbacks模型

    該模型的異步方法,在異步任務完成之后調用,主線程沒有異步線程的結果。經典模型如Swing’s EventListener模型

    1.1示例

    public class CallbackModel implements Callback, Runnable {
        @Override
        public void invoke() {
            System.out.println("這是異步回調的結果");
        }
        @Override
        public void run() {
            try {
                System.out.println(Thread.currentThread().getName() + "::異步線程任務開始");
                Thread.sleep(1000);
                System.out.println(Thread.currentThread().getName() + "::異步線程任務結束");
                invoke();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        public static void main(String[] args) {
            System.out.println(Thread.currentThread().getName() + "::主線程開始");
            new Thread(new CallbackModel(), "線程一").start();
            System.out.println(Thread.currentThread().getName() + "::主線程結束");
        }
    }
    interface Callback {
        void invoke();
    }

    1.2運行結果

    main::主線程開始
    main::主線程結束
    線程一::異步線程任務開始
    線程一::異步線程任務結束
    這是異步回調的結果

    二、Futures模型

    該模型的異步方法,立刻返回一個包裝了結果的返回值Future,T即是包裝的返回值,但返回值不可立即訪問(異步方法為完成),Future對象包裝了對它的訪問。可以輪詢對象,直到該值可用為止。

    2.1用例

    public class FutureModel {
    
        static class FutureTask implements Callable {
    
            @Override
            public Object call()  {
                try {
                    System.out.println(Thread.currentThread().getName() + "::異步線程任務開始");
                    Thread.sleep(4000);
                    System.out.println(Thread.currentThread().getName() + "::異步線程任務結束");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return "1234";
            }
        }
    
    
        public static void main(String[] args) {
            ExecutorService pool = Executors.newSingleThreadExecutor();
            Future<String> submit = pool.submit(new FutureTask());
            try {
                System.out.println(Thread.currentThread().getName() + "返回的結果::" + submit.get());
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (ExecutionException e) {
                e.printStackTrace();
            }finally {
                pool.shutdown();
            }
        }
    }

    2.1用例結果

    pool-1-thread-1::異步線程任務開始
    pool-1-thread-1::異步線程任務結束
    main返回的結果::1234

    三、Future接口

    /**
    *異步計算的結果
    */
    public interface Future<V> {
    
        /**
         * 嘗試取消任務,有可能失敗
         */
        boolean cancel(boolean mayInterruptIfRunning);
    
        /**
         * 判斷是否取消
         *
         * @return {@code true} if this task was cancelled before it completed
         */
        boolean isCancelled();
    
        /**
         *  * 判斷是否完成
         *
         * @return {@code true} if this task completed
         */
        boolean isDone();
    
        /**
         * 等待直至獲取結果
         */
        V get() throws InterruptedException, ExecutionException;
    
        /**
         * 等待指定的時間獲取結果,否則拋出異常
         */
        V get(long timeout, TimeUnit unit)
            throws InterruptedException, ExecutionException, TimeoutException;
    }

    讀到這里,這篇“Java異步編程之Callbacks與Futures模型怎么調用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    青铜峡市| 任丘市| 达拉特旗| 重庆市| 白朗县| 怀安县| 大关县| 镇坪县| 宁夏| 文安县| 阜平县| 长寿区| 买车| 闽侯县| 崇信县| 尉氏县| 万山特区| 靖宇县| 卢氏县| 盐津县| 呼图壁县| 大冶市| 武穴市| 恩平市| 石阡县| 攀枝花市| 贞丰县| 旬阳县| 靖西县| 彭州市| 平和县| 正镶白旗| 吐鲁番市| 宣威市| 柳江县| 泰州市| 方山县| 措美县| 封开县| 吉木乃县| 饶平县|