更多 Java 并发编程方面的文章,请参见文集《Java 并发编程》
FutureTask
FutureTask
是 Future
接口的一个实现类。
使用方式:
- 构造一个
Callable
接口的实例 - 构造一个
FutureTask
的实例,封装Callable
接口的实例 - 通过线程池
ExecutorService
来运行FutureTask
的实例 - 通过
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();
}
}
}