Scoped Values 与结构化并发

共 20 题
#

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 只能单线程执行