http://www.lxweimin.com/p/e3da6d4cd08e
介紹
我們知道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);}