线程基础与生命周期

共 49 题
#

1. Exchanger 在双线程数据交换场景下的工程用例与注意事项

A 任意线程数
B 多线程乱序
C 恰好两个线程在栅栏点交换数据 ✓ 正确答案
D 单线程
#

2. InheritableThreadLocal 的父子线程值传递

A 永不
B 父线程更新时
C 子线程创建时一次性复制 ✓ 正确答案
D 每次任务
#

3. LongAccumulator 的累加函数为何应满足结合性,非交换函数在并发分段合并时有何后果

A 任意
B 只交换
C 无要求
D 结合性(可分段合并) ✓ 正确答案
#

4. Striped64 如何通过 cells 分散热点写入,竞争扩容期间 base 与 cells 分别承担什么角色

A 唯一存储
B
C 只读
D 低竞争时的兜底计数,cells 分散高竞争 ✓ 正确答案
#

5. ThreadLocal 在虚拟线程下的内存膨胀问题与 Scoped Values(JEP 506)的替代方案

A 不随线程数膨胀,作用域绑定、不可变 ✓ 正确答案
B 可写
C 仅平台线程
D 更慢
#

6. ThreadLocal 的实现原理(ThreadLocalMap)与内存泄漏

A
B value 弱引用
C 弱引用 key 失效后 value 仍被强引用且线程长期存活 ✓ 正确答案
D key 强引用
#

7. opaque 访问只保证什么一致性,在哪些高级算法中可用而不应被当作普通发布手段

A 原子性
B 与其他线程的全序排序/及时可见性 ✓ 正确答案
C 非 out-of-thin-air
D 因果一致
#

8. 线程 start() 与 run() 的区别、为什么不能对同一线程重复 start

A 启动新线程
B 抛异常
C 阻塞
D 在当前线程执行 run 方法体 ✓ 正确答案
#

9. 虚拟线程的载体线程调度(ForkJoinPool)与并发上限

A 无限
B 虚拟线程数
C 内存
D 载体线程数(CPU 核数) ✓ 正确答案
#

10. Java 21 虚拟线程(Virtual Threads,JEP 444)的核心特性与启用边界

A
B IO 密集(阻塞等待多) ✓ 正确答案
C CPU 密集
D 纯计算
#

11. Thread.setName/setContextClassLoader 的运维价值

A 无法
B 省内存
C 加速
D 线程 dump/日志中快速定位线程归属 ✓ 正确答案
#

12. 伪共享(False Sharing)的诊断与避免

A
B 加线程
C 缓存行填充/分段,让热变量独占缓存行 ✓ 正确答案
D 加锁
#

13. 守护线程(Daemon Thread)的退出语义与坑点

A 自动完成
B 所有非守护线程终止时 JVM 退出并强制终止守护线程 ✓ 正确答案
C 保证执行完
D 永不退出
#

14. 条件等待必须使用 while 而非 if 的原因是什么,虚假唤醒和条件被其他线程抢先改变如何处理

A 防虚假唤醒与条件被抢先改变 ✓ 正确答案
B
C 语法
D 性能
#

15. 线程 CPU 时间统计(MXBean.getThreadCpuTime)

A 统计内存
B 获取线程数
C 获取线程累计 CPU 时间,识别 CPU 热点 ✓ 正确答案
D 获取锁
#

16. 线程 dump(jstack)的分析关键字段

A 已持有锁
B 已结束
C 运行中
D 等待获取某锁 ✓ 正确答案
#

17. 线程与进程的本质差异、线程共享的资源与隔离的资源

A PC
B 进程的堆与静态变量 ✓ 正确答案
C
D 寄存器
#

18. 线程中断(interrupt())与 InterruptedException 捕获的协作规范及与 Future.cancel 的关系

A 忽略
B 恢复中断标志或重新抛出 ✓ 正确答案
C 吞掉
D 打印
#

19. 线程亲和性(CPU Affinity)的 Java 现状

A 不提供,需 native/JNI 实现 ✓ 正确答案
B 完整支持
C 自动
D 仅虚拟线程
#

20. 线程优先级(setPriority)在不同操作系统上的实际效果与 JVM 的处理策略

A
B 软提示,常被忽略 ✓ 正确答案
C 决定顺序
D 强保证
#

21. 线程优先级(setPriority)的真实影响与 OS 调度

A 只是提示,现代 OS 常忽略 ✓ 正确答案
B 决定调度
C 强保证
D
#

22. 线程命名(setName)在生产环境日志追踪与 Micrometer 集成中的工程价值

A 省内存
B
C 日志追踪与监控中识别线程归属 ✓ 正确答案
D 加速
#

23. 线程状态在 Linux 上的 native 状态映射

A R
B D
C Z
D S(sleeping) ✓ 正确答案
#

24. 线程生命周期(NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WAITING/TERMINATED)

A RUNNABLE
B TIMED_WAITING ✓ 正确答案
C NEW
D BLOCKED
#

25. 线程的 UncaughtExceptionHandler 设置与日志收集

A finally
B Thread.setUncaughtExceptionHandler
C
D Thread.setDefaultUncaughtExceptionHandler ✓ 正确答案
#

26. 线程的创建方式(继承 Thread、实现 Runnable/Callable、线程池)

A Runnable/Callable + 线程池 ✓ 正确答案
B 静态方法
C 继承 Thread
D 裸线程
#

27. 线程组(ThreadGroup)的现状与替代

A ThreadGroup
B 继承
C
D 线程池(ExecutorService) ✓ 正确答案
#

28. Exchanger 的使用场景

A 单线程
B 双线程在栅栏点交换数据 ✓ 正确答案
C 任意
D 多线程
#

29. Exchanger 的双槽实现

A 加锁
B 减速
C 分散并发交换到多个槽位减少竞争 ✓ 正确答案
D
#

30. LockSupport.park 与 unpark 的许可语义如何避免丢失通知,为什么仍要在条件循环中检查状态

A 许可可缓存(unpark 先于 park 时 park 立即返回) ✓ 正确答案
B 通知
C
D 加锁
#

31. Thread.join() 的实现原理(wait/notify)与超时 join 的语义

A sleep
B yield
C wait() 等待线程终止 ✓ 正确答案
D 自旋
#

32. sleep 与 yield 在让出 CPU 上的语义差异与适用场景

A 两者相同
B sleep ✓ 正确答案
C
D yield
#

33. JDK 25 虚拟线程(JEP 444,VirtualThread)与平台线程的 1:N 调度模型对传统线程池设计的影响

A IO 密集免池化,CPU 密集仍池化 ✓ 正确答案
B
C 必须池化
D 线程池废弃
#

34. Thread.UncaughtExceptionHandler 在虚拟线程中独立异常传播路径的设计

A 虚拟线程的 UncaughtExceptionHandler ✓ 正确答案
B GC
C
D 主线程
#

35. Thread.interrupt() 的协作式中断机制与 InterruptedException 处理

A 强制停止
B 设置中断标志,协作式响应 ✓ 正确答案
C 杀死线程
D
#

36. Thread.onSpinWait 如何向处理器提示自旋,为什么它不能替代超时、退避或阻塞机制

A 阻塞
B 超时
C 退避
D 向处理器提示自旋,降低功耗 ✓ 正确答案
#

37. Thread.setDaemon(true) 在虚拟线程下的语义变化与守护线程边界

A
B 非守护
C 可改
D 守护线程,且不可改 ✓ 正确答案
#

38. Thread.stop()/suspend()/resume() 为何废弃

A 无法实现
B 占用内存
C
D 任意位置终止破坏数据一致性且不安全 ✓ 正确答案
#

39. compareAndExchange 与 compareAndSet 的返回语义有何不同,失败时 witness value 可怎样利用

A 实际当前值(witness) ✓ 正确答案
B false
C null
D 期望值
#

40. compareAndSet、compareAndExchange 与不同内存序应如何选择

A weak/plain
B opaque
C
D volatile 语义的 compareAndSet ✓ 正确答案
#

41. final 字段安全发布的边界(this 引用逃逸)

A
B 正常发布
C 构造器内 this 引用逃逸 ✓ 正确答案
D volatile
#

42. lockInterruptibly 与普通 lock 在排队期间收到中断时有何差异,调用方应如何清理状态

A 获取锁
B 死锁
C 忽略
D 抛 InterruptedException 放弃等待 ✓ 正确答案
#

43. out-of-thin-air 值问题与 JLS 限制

A 允许
B 禁止,读值必须是默认值或某次写入的值 ✓ 正确答案
C
D 随机
#

44. weakCompareAndSet 允许伪失败意味着什么,为什么它通常必须放在可重试循环中

A 语义强
B 更快
C 允许伪失败,需重试补救 ✓ 正确答案
D
#

45. 如何用 JMH 设计可重复实验并排除预热、伪共享与调度噪声

A 充分预热(@Warmup) ✓ 正确答案
B 少迭代
C 单线程
D
#

46. 自定义共享同步器的 tryAcquireShared 返回值如何控制传播,返回零与正数分别意味着什么

A 成功且仍有剩余许可,可继续传播 ✓ 正确答案
B 取消
C 失败
D 排队
#

47. Java 25 虚拟线程生态(JEP 506 Scoped Values)

A 作用域,随结构化并发传递 ✓ 正确答案
B 线程
C 进程
D
#

48. Thread.holdsLock(obj) 的真实用途

A 检查当前线程是否持有 obj 的锁 ✓ 正确答案
B 释放锁
C 阻塞
D 获取锁
#

49. CPU 密集/IO 密集任务的线程数经验公式与上下文切换成本的关系

A 任意
B 核数 + 1 ✓ 正确答案
C 核数 × 100
D