Java锁高频面试题及详细答案.docxVIP

  • 2
  • 0
  • 约3.42千字
  • 约 10页
  • 2026-06-08 发布于河北
  • 举报

Java锁高频面试题及详细答案

一、基础概念类

1.什么是Java锁?为什么需要锁?

答案:Java锁是并发编程中用于控制多线程访问共享资源的机制,本质是通过“互斥性”保证同一时间只有一个线程能执行临界区代码,避免出现数据不一致(如脏读、幻读、不可重复读)或线程安全问题(如并发修改异常)。

需要锁的核心原因是:多线程并发访问共享资源时,CPU调度的“抢占式执行”会导致指令执行顺序混乱,比如两个线程同时修改同一个变量,可能出现“写覆盖”问题(例:线程A读值为1,线程B也读值为1,A写2,B写3,最终结果为3,丢失A的修改)。锁通过强制线程排队执行临界区代码,保证操作的原子性、可见性和有序性。

2.乐观锁和悲观锁的区别?实际应用场景有哪些?

答案:两者核心区别在于对“线程冲突”的假设不同:

• 悲观锁:假设线程一定会冲突,先加锁再执行,阻塞其他竞争线程。核心是“防冲突”,牺牲并发效率换安全性。

应用场景:并发写入频繁、临界区代码复杂(执行时间长),比如Synchronized、ReentrantLock、数据库行锁。

• 乐观锁:假设线程很少冲突,先执行再校验,通过版本号/CAS机制判断是否冲突,冲突则重试。核心是“赌不冲突”,牺牲少量重试成本换并发效率。

应用场景:读多写少、并发写入少,比如AtomicInteger

文档评论(0)

1亿VIP精品文档

相关文档