1、定义
Future是JAVA并发框架Executor中的一个类,Executor就是Runnable和Callable的调度容器,Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果操作,用get()可以获得执行结果。
2、举例
public class FutureTask(){
private static ExecutorService pool = Executors.newFixedThreadPool(1);//1
public static void main(String[] args){
futureRunnable();
futureCallable();
}
public static void futureRunnable(){
Future<?> future = pool.submit(new Runnable(){ //2
@Override
public void run() {
String str = "future runnable!";
System.out.println(str);
}
});
pool.shutdown();
try {
System.out.println("future get = " + future.get());//3
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
public static void futureCallable(){
Future<?> future = pool.submit(new Callable<String>(){
@Override
public String call() throws Exception {
String str = "future callable!";
System.out.println(str);
return str;
}
});
pool.shutdown();
try {
System.out.println("future get = " + future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
3、输出结果
4、分析
Future的Runnable进行执行的结果get到的值是null,因为Runnable重写了run()函数,而run()函数是没有返回值的。
Future的Callable进行执行的结果get到的值是返回值,因为Callable重写的call()函数有返回值。
5、使用步骤
- 创建线程池ExecutorService pool
- 提交任务pool.submit()
- 关闭线程池pool.shutdown()
- 获得执行结果(future.get())、取消任务(future.cancel(boolean))、查询是否完成(future.isDone())、查询是否取消(future.isCancelled())
更加详细的使用规则,请参考
Java中的Runnable、Callable、Future、FutureTask的区别与示例