推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

锁机制与线程安全高频面试题.docx

更新时间:2026-10-16 12:26:32 大小:38K 上传用户:江岚查看TA发布的资源 标签:锁机制线程安全悲观锁乐观锁互斥锁 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

锁机制与线程安全高频面试题

锁的分类体系

锁按粒度、性质与实现方式可分为多种类型,面试常要求系统梳理锁的体系。按作用对象区分,有悲观锁与乐观锁:悲观锁假设冲突必然发生,在操作前加锁;乐观锁假设冲突较少,通过版本号或CAS在更新时校验。按粒度区分,有全局锁、表锁、行锁与对象锁,粒度越细并发度越高但管理开销越大。按实现层级区分,有内核态锁如mutex与用户态自旋锁。Java中synchronized为内置监视器锁,ReentrantLock为基于AQS的可重入锁,二者在可中断性、公平性、条件等待与锁获取方式上存在差异。回答时应能说明不同锁的适用场景,例如读多写少场景优先考虑读写锁,追求无阻塞则使用乐观锁。

互斥锁与自旋锁

互斥锁在竞争失败时使线程进入阻塞状态,让出CPU,适合临界区较长或竞争激烈的场景;自旋锁在竞争失败时持续忙等检测锁状态,不进入内核睡眠,适合临界区极短且CPU核心充裕的场景。自旋等待虽避免了线程切换开销,却消耗CPU时间,若持锁者迟迟不释放,自旋线程将空转浪费算力。Linux中的futex机制将二者结合:先尝试用户态快速路径,失败时再陷入内核睡眠,兼顾了低延迟与低资源浪费。面试常考察自旋锁的重入问题与公平性问题,以及如何通过自适应自旋次数避免CPU浪费。理解自旋与阻塞的取舍是回答锁相关开放题的基础。

可重入锁与重入机制

可重入锁允许同一线程在持有锁的情况下再次获取该锁而不会造成死锁。synchronized通过Monitor中记录持有者线程与重入计数实现可重入,ReentrantLock同样维护一个持有者身份与计数,重入一次计数加一,释放一次减一。若锁不可重入,同一线程递归调用带锁方法时就会自锁死锁。可重入性对抽象封装与递归算法尤为重要,例如在继承与回调场景中,父类方法调用子类重写方法,若父类方法已加锁且不可重入,将导致运行时死锁。面试常以可重入锁实现原理、重入计数与释放配对的完整性为考察点,并对比公平锁与非公平锁的获取策略差异。


部分文件列表

文件名 大小
锁机制与线程安全高频面试题.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载