# 1. Structured Concurrency 与 CompletableFuture 的边界 A 两者完全相同 B 结构化并发无法聚合结果 C CompletableFuture 提供结构保证 D 结构化并发强调父子生命周期与取消确定性,CompletableFuture 侧重异步回调组合 ✓ 正确答案
# 2. Scoped Values 与 ThreadLocal 的差异 A Scoped Values 可变且可泄漏 B Scoped Values 不可变、有明确作用域、结构化继承,比 ThreadLocal 更安全 ✓ 正确答案 C ThreadLocal 不可变 D Scoped Values 与 ThreadLocal 完全相同
# 3. Structured Concurrency 的 InheritableThreadLocals 迁移路径 A 应迁移到 Scoped Values,通过 ScopedValue.where/run 与结构化并发明确传递上下文 ✓ 正确答案 B InheritableThreadLocal 在虚拟线程下表现良好 C InheritableThreadLocal 不可迁移 D 迁移会丢失上下文传递能力
# 4. StructuredTaskScope 的 ShutdownOnFailure/ShutdownOnSuccess A ShutdownOnFailure 在任一成功时关闭 B ShutdownOnFailure 任一失败取消其余,ShutdownOnSuccess 任一成功取消其余 ✓ 正确答案 C 两个策略行为相同 D 无法取消子任务
# 5. StructuredTaskScope 的异常传播与 cancel 语义 A 子任务异常被吞掉 B 子任务无法被取消 C 作用域关闭时取消未完成子任务,异常通过 join 确定性传播 ✓ 正确答案 D 异常只能抛给系统
# 6. Scoped Values 与 JDK Flight Recorder 的诊断 A JFR 无法监控 Scoped Values B JFR 提供 ScopedValueBound/Unbound 等事件诊断绑定与传递 ✓ 正确答案 C Scoped Values 无生命周期 D JFR 事件只能监控 ThreadLocal
# 7. Scoped Values 与 Micrometer MDC 的边界 A MDC 与 Scoped Values 完全兼容 B Scoped Values 不可变,MDC 需可变,可将上下文作为 Scoped Value 传递并在日志时读取 ✓ 正确答案 C Scoped Values 可替代 MDC 的所有功能 D MDC 在虚拟线程下无泄漏问题
# 8. Scoped Values 与 Web 请求上下文(Spring) A Scoped Values 可在请求入口绑定上下文,并在虚拟线程/结构化并发下安全传递 ✓ 正确答案 B 请求上下文只能用 ThreadLocal 传递 C Scoped Values 不可用于请求上下文 D Spring 不支持 Scoped Values
# 9. Scoped Values 在 Spring Modulith 事件的传递 A 事件处理无法传递上下文 B Scoped Values 无法用于事件 C Modulith 事件只用同步处理 D Scoped Values 可在事件发布时绑定上下文并在订阅处理中读取,跨模块跨线程传递 ✓ 正确答案
# 10. Scoped Values 在虚拟线程下的最佳实践 A 应在循环中反复绑定 Scoped Value B Scoped Values 无法用于虚拟线程 C 虚拟线程下应用 ThreadLocal 传递上下文 D 应在任务入口绑定 Scoped Value,配合结构化并发继承,并确保作用域解绑 ✓ 正确答案
# 11. Scoped Values 的 ScopedValue.where(k, v).run(...) API A 绑定在 run 之后仍然有效 B run 无法返回结果 C where 绑定、run 定义作用域,作用域内可见且结束后自动解绑 ✓ 正确答案 D 一次只能绑定一个值
# 12. Scoped Values 的 get() 抛出 NoSuchElementException 的边界 A get() 在 key 未绑定时抛 NoSuchElementException,可用 isBound/seeIfPresent 处理 ✓ 正确答案 B get() 在未绑定时返回 null C get() 永不抛异常 D get() 在绑定后也抛异常
# 13. Scoped Values 的 try/catch 与逃逸 A Scoped Values 可逃逸到任意线程 B 异常会破坏绑定 C 逃逸是允许的 D Scoped Values 限制逃逸,值只在结构化作用域内有效,异常处理不影响绑定 ✓ 正确答案
# 14. Scoped Values 的继承(StructuredTaskScope.fork) A 子任务不继承父作用域的 Scoped Value B fork 时子任务捕获父 Scoped Value 快照,可读取父上下文且不逃逸 ✓ 正确答案 C 只有父任务能读 Scoped Value D 继承会泄漏到无关线程
# 15. StructuredTaskScope.join(Duration) 超时,超时后子任务继续运行与取消的取舍,如何避免资源泄漏 A 超时后子任务自动取消 B 超时后需关闭作用域取消未完成子任务,用 try-with-resources 避免资源泄漏 ✓ 正确答案 C 超时后子任务永不结束 D 无法避免资源泄漏
# 16. Subtask 句柄的结果收集,遍历 fork 返回的引用、分类成功与失败并安全调用 get() A 所有 Subtask 都能直接 get() B Subtask 句柄无法分类 C get() 永不抛异常 D 通过 state() 分类成功/失败,仅对 SUCCESS 句柄安全调用 get() ✓ 正确答案
# 17. Scoped Values(JEP 506 Final)的不可变特性 A Scoped Value 绑定后不可变,线程安全且可预测 ✓ 正确答案 B Scoped Value 绑定后可在作用域内修改 C Scoped Values 与 ThreadLocal 一样可变 D 不可变导致无法使用
# 18. Structured Concurrency 与虚拟线程的协作 A 结构化并发使用固定线程池 B 两者互相排斥 C StructuredTaskScope 默认在虚拟线程上执行子任务,实现大规模并行 + 结构化安全 ✓ 正确答案 D 虚拟线程无法用于结构化并发
# 19. ScopedValue 的快照与恢复,snapshot/restore 如何被框架用来保存并恢复调用上下文 A snapshot 保存单个 key B 快照不可恢复 C snapshot() 保存全部绑定快照,restore() 恢复,框架用它捕获与恢复上下文 ✓ 正确答案 D 快照机制无用途
# 20. StructuredTaskScope 的 fork 执行器,默认在虚拟线程运行,如何通过工厂切换执行方式 A fork 默认使用固定线程池 B 无法自定义执行器 C fork 默认在虚拟线程运行,可通过构造器传入自定义 Executor 切换执行方式 ✓ 正确答案 D fork 只能单线程执行