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<String> futureTask1 = new FutureTask<String>(new MyCallable(1000));
        FutureTask<String> futureTask2 = new FutureTask<String>(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<String> {
        private long waitTime;

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

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

            return Thread.currentThread().getName();
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容