Future 与 CompletableFuture 异步编程

共 26 题
#

1. CompletableFuture 与自定义 Executor 组合时,链路追踪上下文丢失会导致什么问题,包装 Runnable 的方案如何保证清理

A 不处理
B 只设置
C 捕获-设置-执行后清理(finally) ✓ 正确答案
D 只清理
#

2. CompletableFuture 的 allOf/anyOf 与 thenApply 组合

A 异常
B 完成信号(结果需各自 join) ✓ 正确答案
C 第一个结果
D
#

3. CompletableFuture 的 getNow/complete/completeExceptionally

A 阻塞等待
B null
C 异常
D 默认值 x ✓ 正确答案
#

4. CompletableFuture 的 toCompletableFuture 转换

A 取消
B 把 CompletionStage 转为 CompletableFuture ✓ 正确答案
C 阻塞
D 转成 Future
#

5. CompletableFuture 的异常处理(exceptionally/handle/whenComplete)

A orTimeout
B exceptionally
C whenComplete
D handle ✓ 正确答案
#

6. CompletableFuture 的循环链(loop chain)内存风险

A 更快
B 死锁
C 内存泄漏/栈溢出(无限递归创建节点) ✓ 正确答案
D
#

7. CompletableFuture 的链式调用(thenApply/thenCompose/thenCombine)

A thenApply
B thenCompose ✓ 正确答案
C thenCombine
D get
#

8. CompletableFuture 链中阻塞操作的影响

A
B 更快
C 自动取消
D 耗尽线程池线程,后续任务排队 ✓ 正确答案
#

9. CompletableFuture 默认 ForkJoinPool.commonPool 与自定义 Executor 组合时的上下文切换成本

A 省内存
B
C 线程切换成本与资源竞争 ✓ 正确答案
D 更快
#

10. CompletionStage(JDK 8+)与 CompletableFuture 在组合异步任务时的链式 API 设计

A 阻塞
B
C 回调地狱
D 声明式编排异步任务,避免回调地狱 ✓ 正确答案
#

11. ExecutorService.submit 返回 Future 与 Executor.execute 的异常处理差异

A future.get() 时抛 ExecutionException ✓ 正确答案
B 立即
C 永不
D stderr
#

12. Future 接口的限制(阻塞、取消、组合)

A 组合多个任务 ✓ 正确答案
B 取消
C 超时
D 阻塞取结果
#

13. Future 链式调用缺失与 CompletableFuture 的对比

A
B CompletableFuture 链式 API ✓ 正确答案
C Future
D 纯回调
#

14. Future.cancel(mayInterruptIfRunning) 的真实行为

A 中断
B 抛异常
C 强制停止
D 继续执行,但 Future 标记为取消 ✓ 正确答案
#

15. Future.get() 在 JDK 25 中对中断(Interrupt)与虚拟线程的取消传播机制

A 占用载体线程
B 死锁
C 无法取消
D 卸载载体线程,可被中断 ✓ 正确答案
#

16. Future.get() 的可中断与超时

A TimeoutException ✓ 正确答案
B ExecutionException
C
D InterruptedException
#

17. FutureTask 的状态机与实现

A
B NEW→NORMAL
C NEW→COMPLETING
D NEW→INTERRUPTING→INTERRUPTED ✓ 正确答案
#

18. JDK 21 虚拟线程与 CompletableFuture 的搭配

A 相同
B CF 替代虚拟线程
C 互斥
D 互补(虚拟线程处理阻塞,CF 编排) ✓ 正确答案
#

19. JDK 25 中 CompletableFuture 对虚拟线程的执行策略(virtualThreadExecutor)支持

A 调用 complete() 提前完成
B 不指定 Executor,默认即可
C 显式传入 Executors.newVirtualThreadPerTaskExecutor() 作为 Executor ✓ 正确答案
D 在异步阶段内阻塞等待
#

20. JDK 25 中虚拟线程在 I/O 阻塞场景下对 Future 异步模型的简化价值

A
B 用同步代码写 I/O,免回调,简化并发 ✓ 正确答案
C 强制异步
D 更复杂
#

21. CompletionStage 接口的设计目标

A 声明式表达异步阶段与依赖编排 ✓ 正确答案
B 阻塞取值
C
D 简化同步
#

22. JDK 25 的 StructuredTaskScope 与 ExecutorService 在异常传播与取消语义上的根本差异是什么,为何被认为是 Future 的现代替代

A 更简单
B 结构化生命周期、异常聚合、级联取消 ✓ 正确答案
C 更快
D
#

23. copy()(JDK 9+)与 minimalCompletionStage

A 复制
B 降级为只读 CompletionStage,禁止修改/阻塞 ✓ 正确答案
C 取消
D 加速
#

24. JDK 25 虚拟线程下 CompletableFuture 的演进

A 强制平台线程
B 移除 CF
C 通过显式传入虚拟线程 Executor 支持异步阶段在虚拟线程执行 ✓ 正确答案
D
#

25. JDK 25 中 StructuredTaskScope(JEP 505,5th Preview)作为 Future 替代的 API 设计要点

A 任一子任务失败即停止其余任务(短路) ✓ 正确答案
B
C 阻塞
D 加速
#

26. 异步任务编排的取消与超时,orTimeout/completeOnTimeout 与调用方取消的传播边界如何?

A 阻塞
B 抛异常
C 继续执行,CF 以超时完成 ✓ 正确答案
D 被取消