场景
- 异步计算结果获取:当需要执行一个耗时操作,但不想阻塞主线程,可将该操作放入异步任务,通过
Future
接口在合适的时机获取计算结果。例如在进行复杂的数据库查询、大规模数据处理等操作时,先发起任务,主线程继续执行其他任务,之后再获取异步任务的结果。
- 多任务并行处理:在有多个独立任务需要并行执行的场景下,每个任务可异步执行,使用
Future
接口来管理这些任务,并获取它们的执行结果。比如一个系统需要同时从多个不同的数据源获取数据,每个数据源的获取操作可以作为一个异步任务,通过Future
接口来等待所有任务完成并收集结果。
示例代码
import java.util.concurrent.*;
public class FutureExample {
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future<Integer> future = executorService.submit(() -> {
// 模拟一个耗时的异步任务
Thread.sleep(2000);
return 42;
});
try {
System.out.println("主线程继续执行其他任务...");
// 获取异步任务的结果,如果任务未完成,get()方法会阻塞直到任务完成
Integer result = future.get();
System.out.println("异步任务的结果是: " + result);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
} finally {
executorService.shutdown();
}
}
}