外观
一句话答案
死锁四必要条件:互斥/占有等待/不可剥夺/循环等待;排查用 jstack/jconsole/Arthas thread -b。
核心要点
排查: jstack <pid> → 搜索 deadlock / jconsole 线程面板 / Arthas thread -b
预防: 保持加锁顺序一致 / tryLock超时 / 减小锁粒度 / 避免嵌套锁
追问与易错
追问方向:
- 怎么预防死锁?
- 数据库死锁和 Java 死锁排查方式的区别?
- 你遇到过实际的死锁吗?
易错点:
- ❌ 避免嵌套锁就不会死锁——顺序不一致也会
- ❌ 用 tryLock 就一定不死锁——需设合理超时
💡 记忆锚点
死锁是两个人各握一根筷子都等对方先放手才吃饭——互斥、占着不放、不能抢、形成环,四个条件缺一不可。破局:要么统一先拿左筷子再拿右筷子(固定加锁顺序),要么等三秒拿不到就放下重来(tryLock 超时)。排查用 jstack 搜 deadlock 一眼定位。