1 概述
Future代表异步计算返回的结果,提供了检查是否结束、等待结束以及获取计算结果的方法。Executor框架使用Runnable作为其任务表示形式,但它不能返回一个值。许多任务实际上都是存在延迟计算的:执行数据库查询,从网络上获取资源,或者某个复杂耗时的计算。对于这种任务,Callable是一个更好的抽象,他能返回一个值,并可能抛出一个异常。
/**
* A task that returns a result and may throw an exception.
* Implementors define a single method with no arguments called
* call.
*
*
The Callable interface is similar to {@link
* java.lang.Runnable}, in that both are designed for classes whose
* instances are potentially executed by another thread. A
* Runnable, however, does not return a result and cannot
* throw a checked exception.
*
*
The {@link Executors} class contains utility methods to
* convert from other common forms to Callable classes.
*
* @see Executor
* @since 1.5
* @author Doug Lea
* @param the result type of method call
*/
public interface Callable {
/**
* Computes a result, or throws an exception if unable to do so.
*
* @return computed result
* @throws Exception if unable to compute a result
*/
V call() throws Exception;
}
public interface Future {
/**
* Attempts to cancel execution of this task. This attempt will
* fail if the task has already completed, has already been cancelled,
* or could not be cancelled for some other reason. If successful,
* and this task has not started when cancel is called,
* this task should never run. If the task has already started,
* then the mayInterruptIfRunning parameter determines
* whether the thread executing this task should be interrupted in
* an attempt to stop the task.
*
*
After this method returns, subsequent calls to {@link #isDone} will
* always return true. Subsequent calls to {@link #isCancelled}
* will always return true if this method returned true.
*
* @param mayInterruptIfRunning true if the thread executing this
* task should be interrupted; otherwise, in-progress tasks are allowed
* to complete
* @return false if the task could not be cancelled,
* typically because it has already completed normally;
* true otherwise
*/
boolean cancel(boolean mayInterruptIfRunning);
/**
* Returns true if this task was cancelled before it completed
* normally.
*
* @return