理解 Java 中的 Future 及其底层实现
在Java中,Future
是一个接口,它用来表示异步计算的结果。Future
提供了检查计算是否完成、等待计算完成以及获取计算结果的方法。
Future
通常与 Executor
框架中的执行器服务一起使用,允许用户提交任务并在之后获取结果,而不是直接在当前线程中等待结果的返回。
以下是一个使用 Future
的简单示例:
import java.util.concurrent.*;
public class FutureExample {
public static void main(String[] args) throws ExecutionException, InterruptedException {
ExecutorService executor = Executors.newCachedThreadPool();
// 提交任务并获取Future对象
Future<Integer> future = executor.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
// 模拟耗时计算
Thread.sleep(1000);
return 123;
}
});
// 检查任务是否完成
boolean isDone = future.isDone();
System.out.println("任务是否完成: " + isDone);
// 阻塞当前线程并等待任务完成,然后获取结果
Integer result = future.get();
System.out.println("计算结果: " + result);
// 关闭执行器服务
executor.shutdown();
}
}
在这个例子中,我们创建了一个 ExecutorService
来提交一个任务,并获取了一个 Future
对象。Future
可以用来检查任务是否完成以及获取任务的结果。
Future
的具体实现类,如 FutureTask
,可以用来表示一个可取消的异步计算。FutureTask
既可以作为一个任务执行,也可以作为一个 Future
获取结果。
Java 8 引入了一个新的 CompletableFuture
类,它扩展了 Future
的功能,提供了更多的异步编程工具和流式控制结构。
评论已关闭