用户工具


实现一个ListenableFuture的步骤如下

  1. 提交任务后返回一个自定义的future。有如下2个特性
    1. 包含一个Listeners的列表
    2. 任务执行完成后,依次触发每个Listener

参考guava中的ListenableFuture的实现

  1. 将一个java线程池封装成返回自定义ListenableFuture的线程池
    1. 重写了newTaskFor函数,返回自定义的ListenableFuture
  2. 自定义的ListenableFuture执行完成后,触发每个Listener

例子

    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);
    }