当我们将任务放入线程池后,如果不需要获取任务结果,可以使用execute。如果需要的话,可以使用submit。
线程池提交任务
1.提交一个Callable任务,任务返回值通过get方法获取。
2.提交Runnable任务及结果引用,任务执行结果为传入的result参数。
3.提交一个Runnable任务,仅仅用于判断任务是否已经结束。
深入Future
// 取消任务
boolean cancel(boolean mayInterruptIfRunning);
//判断任务是否已取消
boolean isCancelled();
//判断任务是否已经完成
boolean isDone();
//获取任务结果
V get() throws InterruptedException, ExecutionException;
//获取任务结果,支持超时
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
Future只是个接口,真正实现类是FutureTask。
可以通过创建出来的FutureTask加入到线程池中执行,通过get来同步获取任务结果。
多线程可以将一些串行任务并行化;如果任务之间有依赖关系,比如当前任务依赖前一个任务的结果,那么我们都可以用Future解决。
// 创建任务T2的FutureTask
FutureTask<String> ft2= new FutureTask<>(new T2Task());
// 创建任务T1的
FutureTask FutureTask<String> ft1 = new FutureTask<>(new T1Task(ft2));
//t1任务依赖t2任务执行完成的结果 可以这样搞。