Guava ListenableFuture介紹以及使用

weixin_34249678發表於2016-11-12

介紹

我們知道java中的Future表示一個非同步計算任務,當任務完成時可以得到計算結果,如果我們希望一旦計算完成就拿到結果展示給使用者或者做計算,就必須使用另一個執行緒不斷的查詢計算狀態,這樣會使程式碼複雜而且效率低下。使用guava的ListenableFuture可以幫我們檢測Future是否完成了,如果完成就會自動呼叫回撥函式,這樣可以減少併發程式的複雜度。

使用示例

 public static void main(String[] args) {
    ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
    // 執行任務
    final ListenableFuture<Integer> listenableFuture =  executorService.submit(new Callable<Integer>() {
        public Integer call() throws Exception {
            System.out.println("新任務。。。");
            TimeUnit.SECONDS.sleep(1);
            return 7;
        }

    });
    // 任務完成回掉函式
    final FutureCallback<Integer> futureCallback = new FutureCallback<Integer>() {
        @Override
        public void onSuccess(Integer result) {
            System.out.println("任務執行成功,對任務進行操作。");
        }

        @Override
        public void onFailure(Throwable t) {
            System.out.println("任務執行失敗。");
        }
    };

    // 繫結任務以及回撥函式
    Futures.addCallback(listenableFuture, futureCallback);
}

相關文章