Future的功能
1.判断任务是否完成
2.能中断任务
3.能够获取任务执行结果
Future是一个接口,代表了异步执行的任务,所以必须要有实现类,因此有了FutureTask
FutureTask
futureTask实现了runnableFuture接口,提供了两个构造函数
1.以Callable为参数
2.以Runnable为参数
FutureTask可以由执行者调用,这一点很关键,它对外提供的方法就是Future和
Runnable的接口组合:get(),cancel,isDone(),isCancelled()
以及run(),而run()不需要我们调用,都是有执行者调用。
使用方式
1.要执行的任务(实现callable)
public 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();
}
}
2. 将Callable写的任务封装到一个由执行者调度的FutureTask对象
MyCallable callable = new MyCallable(1000);
FutureTask<String> futureTask = new FutureTask<String>();
3.创建线程执行任务
ExecutorService executor = Executors.newFixedThreadPool(2);
executor.execute(futureTask);