- 3
- 0
- 约4.91千字
- 约 8页
- 2026-06-08 发布于河北
- 举报
Java锁高频面试题(详解+真实面试答案)
一、锁基础概念面试题
1.什么是线程安全?为什么需要锁?
详细答案:
多线程同时操作共享变量的时候,如果最终结果和单线程串行执行的结果不一致,就是线程不安全。根本原因是CPU的原子性、可见性、有序性被破坏。
锁的核心作用就是保证多线程竞争共享资源时的三大特性:
1.原子性:一段代码要么全部执行完,要么不执行,不会中途被其他线程插队;
2.可见性:一个线程修改了共享变量,其他线程能立刻感知到;
3.有序性:禁止指令重排序,保证代码执行顺序符合代码编写逻辑。
简单说:锁就是用来解决多线程并发争抢资源导致的数据错乱问题。
2.悲观锁和乐观锁的区别?各自适用场景?
详细答案:
悲观锁:
默认并发一定会产生冲突,所以线程操作资源前先加锁,锁住资源,其他线程必须阻塞等待。
典型实现:synchronized、ReentrantLock、数据库行锁/表锁。
优点:并发冲突多的时候稳定性高;缺点:阻塞等待,性能差,有线程切换开销。
乐观锁:
默认并发没有冲突,不加锁,直接执行业务,更新数据时再校验是否被修改过,如果冲突就重试/失败。
典型实现:CAS、版本号机制、Atomic原子类。
优点:无阻塞、性能高;缺点:冲突多的时候会大量自旋重试,浪费CPU。
适用场景:
悲观锁:写操作多、并发冲突频繁、对数据一致性要求极高的场景;
乐观锁:读多写少
原创力文档

文档评论(0)