Java FutureTask 可异步执行的任务

更多 Java 并发编程方面的文章,请参见文集《Java 并发编程》


FutureTask

FutureTaskFuture 接口的一个实现类。

使用方式:

  1. 构造一个 Callable 接口的实例
  2. 构造一个 FutureTask 的实例,封装 Callable 接口的实例
  3. 通过线程池 ExecutorService 来运行 FutureTask 的实例
  4. 通过 get() 方法来获得结果

可以看出,FutureTask 与使用 Callable & Future 的目的差不多,因此 FutureTask 实际不常使用,直接使用 Callable & Future 就可以了。

示例:

public class FutureTask_Test {
    public static void main(String args[]) throws Exception {
        FutureTask futureTask1 = new FutureTask(new MyCallable(1000));
        FutureTask futureTask2 = new FutureTask(new MyCallable(2000));

        ExecutorService executor = Executors.newFixedThreadPool(2);
        executor.execute(futureTask1);
        executor.execute(futureTask2);

        System.out.println("FutureTask1 output=" + futureTask1.get());
        System.out.println("FutureTask2 output=" + futureTask2.get());

        executor.shutdown();
    }

    static class MyCallable implements Callable {
        private long waitTime;

        public MyCallable(int timeInMillis) {
            this.waitTime = timeInMillis;
        }

        @Override
        public String call() throws Exception {
            Thread.sleep(waitTime);

            return Thread.currentThread().getName();
        }
    }
}

你可能感兴趣的:(Java FutureTask 可异步执行的任务)