Java锁高频面试题(详解+真实面试答案).docxVIP

  • 3
  • 0
  • 约4.91千字
  • 约 8页
  • 2026-06-08 发布于河北
  • 举报

Java锁高频面试题(详解+真实面试答案).docx

Java锁高频面试题(详解+真实面试答案)

一、锁基础概念面试题

1.什么是线程安全?为什么需要锁?

详细答案:

多线程同时操作共享变量的时候,如果最终结果和单线程串行执行的结果不一致,就是线程不安全。根本原因是CPU的原子性、可见性、有序性被破坏。

锁的核心作用就是保证多线程竞争共享资源时的三大特性:

1.原子性:一段代码要么全部执行完,要么不执行,不会中途被其他线程插队;

2.可见性:一个线程修改了共享变量,其他线程能立刻感知到;

3.有序性:禁止指令重排序,保证代码执行顺序符合代码编写逻辑。

简单说:锁就是用来解决多线程并发争抢资源导致的数据错乱问题。

2.悲观锁和乐观锁的区别?各自适用场景?

详细答案:

悲观锁:

默认并发一定会产生冲突,所以线程操作资源前先加锁,锁住资源,其他线程必须阻塞等待。

典型实现:synchronized、ReentrantLock、数据库行锁/表锁。

优点:并发冲突多的时候稳定性高;缺点:阻塞等待,性能差,有线程切换开销。

乐观锁:

默认并发没有冲突,不加锁,直接执行业务,更新数据时再校验是否被修改过,如果冲突就重试/失败。

典型实现:CAS、版本号机制、Atomic原子类。

优点:无阻塞、性能高;缺点:冲突多的时候会大量自旋重试,浪费CPU。

适用场景:

悲观锁:写操作多、并发冲突频繁、对数据一致性要求极高的场景;

乐观锁:读多写少

文档评论(0)

1亿VIP精品文档

相关文档