Skip to content
进阶

一句话答案

死锁四必要条件:互斥/占有等待/不可剥夺/循环等待;排查用 jstack/jconsole/Arthas thread -b。

核心要点

排查: jstack <pid> → 搜索 deadlock / jconsole 线程面板 / Arthas thread -b

预防: 保持加锁顺序一致 / tryLock超时 / 减小锁粒度 / 避免嵌套锁

追问与易错

追问方向:

  • 怎么预防死锁?
  • 数据库死锁和 Java 死锁排查方式的区别?
  • 你遇到过实际的死锁吗?

易错点:

  • ❌ 避免嵌套锁就不会死锁——顺序不一致也会
  • ❌ 用 tryLock 就一定不死锁——需设合理超时

💡 记忆锚点

死锁是两个人各握一根筷子都等对方先放手才吃饭——互斥、占着不放、不能抢、形成环,四个条件缺一不可。破局:要么统一先拿左筷子再拿右筷子(固定加锁顺序),要么等三秒拿不到就放下重来(tryLock 超时)。排查用 jstack 搜 deadlock 一眼定位。