实现一个ListenableFuture的步骤如下 - 提交任务后返回一个自定义的future。有如下2个特性 - 包含一个Listeners的列表 - 任务执行完成后,依次触发每个Listener ===== 参考guava中的ListenableFuture的实现 ===== - 将一个java线程池封装成返回自定义ListenableFuture的线程池 - 重写了newTaskFor函数,返回自定义的ListenableFuture - {{:pasted:20180701-191851.png}} - 自定义的ListenableFuture执行完成后,触发每个Listener - {{:pasted:20180701-192846.png}} ===== 例子 ===== public static void main(String[] args) { // 将java线程池封装成自定义的线程池 ListeningExecutorService executorService = MoreExecutors.listeningDecorator(Executors.newFixedThreadPool(1)); // 自定义线程返回一个ListenableFuture ListenableFuture futureTask = executorService.submit(() -> { System.out.println(111); }); // 添加一个listener, 并可以设置执行这个任务的线程池。(默认用执行任务的线程池) // 如果listener的执行时间很长,建议用其他的线程池。 ExecutorService utilExecutorService = Executors.newFixedThreadPool(1); futureTask.addListener(() -> { System.out.println("end"); }, utilExecutorService); }