synchronized 与锁机制

共 23 题
#

1. JEP 491 在 JDK 24 解决 synchronized pin 的方法

A 增加载体线程
B 移除监视器
C 虚拟线程阻塞时释放监视器、恢复时重获 ✓ 正确答案
D 禁用 synchronized
#

2. Java 25 虚拟线程下 synchronized 性能优化结论

A 仍严重钉住
B JEP 491 消除钉住,性能与 ReentrantLock 相当,可作默认 ✓ 正确答案
C 必须用 ReentrantLock
D synchronized 不可用
#

3. Java 对象头(Mark Word)与锁状态(无锁/偏向/轻量/重量)

A 堆外
B 对象头 Mark Word ✓ 正确答案
C 方法区
D
#

4. Thread.holdsLock 与死锁探测

A jstack/JMX findDeadlockedThreads ✓ 正确答案
B Thread.holdsLock
C Thread.sleep
D Thread.yield
#

5. 偏向锁的撤销成本与 JDK 15 默认禁用原因

A 无法实现
B 撤销成本高、收益场景少,且与虚拟线程不兼容 ✓ 正确答案
C 收益大
D 性能更好
#

6. 轻量级锁(Lightweight Locking)、偏向锁(Biased Locking)

A 都是无竞争优化,偏向锁省 CAS、轻量锁用 CAS ✓ 正确答案
B 都阻塞
C 都需 OS 调度
D 竞态相同
#

7. synchronized 修饰实例方法、静态方法、代码块的锁对象差异

A this
B 任意对象
C
D 该类的 Class 对象 ✓ 正确答案
#

8. synchronized 关键字的底层实现(Monitor、ACC_SYNCHRONIZED)

A 普通调用
B 无指令
C monitorenter/monitorexit 指令 ✓ 正确答案
D 仅标志
#

9. 对象头(Object Header)的 Mark Word 在不同锁状态下的位图布局

A hashcode
B 2 位 lock 标志(00 轻量/01 无锁偏向/10 重量/11 GC) ✓ 正确答案
C
D age
#

10. 死锁检测工具(jstack/jcmd Thread.print)在生产环境的采样与分析策略

A 多次采样 + 分析锁持有/等待链 ✓ 正确答案
B 单次 dump
C 重启
D 只看 CPU
#

11. 死锁的产生条件与 jstack 定位死锁

A 仅互斥
B 互斥、共享、可剥夺
C 互斥、占有等待、非剥夺、循环等待 ✓ 正确答案
D 仅循环
#

12. 活锁、饥饿与公平性三者在并发场景下的差异,如何识别并用锁策略解决?

A 无锁
B 非公平锁
C 自旋
D 公平锁(FIFO 分配) ✓ 正确答案
#

13. 自旋锁的适用场景与自适应自旋(JDK 6+)

A 永不自旋
B 永阻塞
C JVM 根据持锁时间与成功率动态调整自旋次数 ✓ 正确答案
D 固定自旋次数
#

14. 读写锁在读多写少与写饥饿场景下的表现如何评估,何时应改用 StampedLock 或公平策略?

A 非公平读写锁
B 无限读锁
C StampedLock 乐观读或公平策略 ✓ 正确答案
D
#

15. 读写锁降级为何允许先取写锁再取读锁,反向升级又为什么容易形成互相等待

A 无原因
B 语法不允许
C 多线程持读锁时都等写锁,互相等待死锁 ✓ 正确答案
D 性能差
#

16. 锁消除(Lock Elision)与锁粗化(Lock Coarsening)

A 合并相邻的多次加锁/解锁为一次 ✓ 正确答案
B 删锁
C 扩容
D 加更多锁
#

17. 锁竞争(Lock Contention)监控与线程 dump 解读

A 已结束
B 等待获取锁(竞争) ✓ 正确答案
C 运行中
D 睡眠
#

18. 锁粒度(粗/细)的取舍与场景

A 并发度高、吞吐高 ✓ 正确答案
B 简单
C 竞争集中
D 无死锁
#

19. LockSupport.park/unpark 与 Object.wait 的差异

A unpark 可先于 park,许可缓存不丢失唤醒,且无需持锁 ✓ 正确答案
B wait 更灵活
C park 必须持锁
D 相同
#

20. JDK 24+(JEP 491)消除 synchronized 钉住后,虚拟线程下 synchronized 与 ReentrantLock 的取舍

A 都禁止
B ReentrantLock 总是
C 无锁
D synchronized(默认),需要高级能力时用 ReentrantLock ✓ 正确答案
#

21. synchronized 在 JDK 24+ 的 pin 修复(JEP 491)

A GC
B synchronized 在虚拟线程下的钉住问题 ✓ 正确答案
C 内存泄漏
D 类加载
#

22. JEP 491 如何解决虚拟线程在 synchronized 块上的钉住(pinning)问题

A 禁用 synchronized
B 阻塞时释放监视器、恢复时重获 ✓ 正确答案
C 增加载体线程
D 移除监视器
#

23. wait()/notify()/notifyAll() 的合法使用模式

A 无原因
B 加速
C 防虚假唤醒与条件被抢先改变 ✓ 正确答案
D 语法要求