ListenableFuture顾名思义就是能够监听的Future,它是对java原生Future的扩展加强。咱们知道Future表示一个异步计算任务,当任务完成时能够获得计算结果。若是咱们但愿一旦计算完成就拿到结果展现给用户或者作另外的计算,就必须使用另外一个线程不断的查询计算状态。这样作,代码复杂,并且效率低下。使用ListenableFuture Guava帮咱们检测Future是否完成了,若是完成就自动调用回调函数,这样能够减小并发程序的复杂度。java
代码:并发
import com.google.common.util.concurrent.*; import java.util.concurrent.*; /** * Created by admin on 2016/4/27. */ public class ExcutorEngineTest { public static void main(String[] args) throws Exception { ListeningExecutorService executorService = MoreExecutors .listeningDecorator(MoreExecutors .getExitingExecutorService(new ThreadPoolExecutor(10, 100, 3000, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()))); ListenableFuture<Integer> future = executorService.submit(new Task("test")); System.out.println("future:" + future.get()); Futures.addCallback(future, new FutureCallback<Integer>() { @Override public void onSuccess(Integer result) { System.out.println("result" + result); } @Override public void onFailure(Throwable t) { System.err.println("error"); } }); } static class Task implements Callable<Integer>{ String str; public Task(String str){ this.str = str; } @Override public Integer call() throws Exception { System.out.println("call excute...." + str); return 8; } } }
--------------------异步
执行结果:ide
call excute....test函数
future:8this
result8google