亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

    邯郸市| 长汀县| 海兴县| 霍邱县| 盱眙县| 门源| 花垣县| 栾川县| 平江县| 苏州市| 赤水市| 衢州市| 深水埗区| 义马市| 萨迦县| 姜堰市| 宁南县| 鹤庆县| 政和县| 信宜市| 白银市| 青海省| 平和县| 鹰潭市| 锡林郭勒盟| 浠水县| 瑞丽市| 驻马店市| 海安县| 文登市| 凤冈县| 建平县| 陕西省| 寿阳县| 江门市| 体育| 南汇区| 广安市| 渭源县| 临江市| 扬州市|