并发编程(二) Future
1.1 Future是什么?
异步任务中我们需要知道的两个重要属性是
- 任务什么时候结束?
- 任务的结果是什么?
ThreadPoolExecutor提交任务的方法有如下几个:
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
void execute(Runnable command);
其中execute方法是没有返回值的。
submit有三个重构方法。两个又返回值的对象都是Future对象,通过Future的方法我们就可以获取任务执行的状态和结果。Future的五个方法如下:
/**
* 取消任务
*/
boolean cancel(boolean mayInterruptIfRunning);
/**
* 任务是否被取消
*/
boolean isCancelled();
/**
* 任务是否完成
*/
boolean isDone();
/**
* 获取任务的结果
*/
V get() throws InterruptedException, ExecutionException;
/**
* 获取任务的结果,支持超时机制,规定的时间获取不到结果,就不再阻塞线程
*/
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
1.2 Future的使用
<T> Future<T> submit(Callable<T> task);
<T> Future<T> submit(Runnable task, T result);
Future<?> submit(Runnable task);
void execute(Runnable command);
其中execute方法是没有返回值的。
submit有三个重构方法。两个又返回值的对象都是Future对象,通过Future的方法我们就可以获取任务执行的状态和结果。Future的五个方法如下:
/**
* 取消任务
*/
boolean cancel(boolean mayInterruptIfRunning);
/**
* 任务是否被取消
*/
boolean isCancelled