Skip to content
进阶

一句话答案

死锁四必要条件:互斥/占有等待/不可剥夺/循环等待,预防方式:破坏其中一个条件(如超时释放/按序申请)。

核心要点

预防:

  • 破坏占有等待:一次性申请所有资源
  • 破坏不可剥夺:超时释放
  • 破坏循环等待:资源排序,按序申请

检测: 资源分配图 / jstack 线程 dump / SHOW ENGINE INNODB STATUS

追问与易错

追问方向:

  • 怎么检测 Java 死锁?
  • 数据库死锁和 Java 死锁排查区别?
  • 哲学家就餐问题怎么解决?

易错点:

  • ❌ 避免所有嵌套锁就不会死锁——顺序不一致也会
  • ❌ 死锁只影响两个线程——可能是多线程循环等待

💡 记忆锚点

死锁像十字路口堵死:四个方向的车都占着路不让(互斥+占有等待+不可剥夺+循环等待),四个条件缺一不可。解法:要么一次性给所有路权(破坏占有等待),要么超时自动让路(破坏不可剥夺),要么规定只能按东南西北顺序走(破坏循环等待,按序申请锁)。