面试题答案
一键面试Future
接口的作用
在Java网络编程的异步处理场景中,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(3000);
return 42;
});
// 主线程可以继续执行其他任务
// 获取异步任务的执行结果,这里会阻塞直到任务完成
Integer result = future.get();
System.out.println("异步任务的结果: " + result);
executorService.shutdown();
}
}
在上述代码中:
- 创建了一个单线程的线程池
ExecutorService
。 - 使用
submit
方法提交一个异步任务,这个任务返回一个Future
对象。 - 主线程可以继续执行其他操作,而不必等待异步任务完成。
- 通过调用
future.get()
方法来获取异步任务的执行结果。如果异步任务还未完成,get()
方法会阻塞当前线程,直到任务完成并返回结果。最后关闭线程池。