Future接口
Future接口是Java 1.5引入的新特性,可以方便的用于异步结果的获取。
接口定义如下:
public interface Future<V> {
// 取消提交的异步任务
boolean cancel(boolean mayInterruptIfRunning);
// 判断异步任务是否已取消
boolean isCancelled();
// 判断异步任务是否已完成
boolean isDone();
// 获取异步任务的执行结果,该操作为阻塞操作,异步任务完成后才会返回
V get() throws InterruptedException, ExecutionException;
// 获取异步任务的执行结果,若超过timeout,则直接返回(任务未完成的话,返回Null)
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
可以看出,Future接口最多称得上半异步,因为真正的异步应该是异步任务完成的时候,主动通知我去取任务结果,而不是我自己阻塞获取。
用一个例子说明Future接口的使用,假设有客人拜访我,我需要泡好茶、洗好水果来招待客人。
准备过程包括: 煮水10分钟、泡茶5分钟、洗水果5分钟。
泡茶依赖于煮水,但我们可以在等待煮水的过程中,把水果洗了,从而节省时间。
public class FutureTest {
// 泡茶
public static void tea(