【JVM调优实战】24-线程死锁与死循环排查 📅 2026/7/21 22:48:33 线程死锁与死循环排查本文是《JVM调优实战》专栏第 24 讲。凌晨两点,线上告警:某接口全部超时,但 CPU 正常、内存正常、GC 正常——一切指标都看似健康,唯独应用"卡死了"。如果你遇到这种情况,第一个要怀疑的就是死锁:两个或多个线程互相持有对方需要的锁,谁都不肯放手,所有人都在等,就像四辆车在十字路口互不相让,谁也走不了。死锁是并发编程的"鬼故事"——它不会抛异常,不会打印日志,不会消耗 CPU,程序只是无声地停在那儿。本讲将拆解死锁的原理、检测方法和修复策略,并延伸讨论活锁、线程饥饿和死循环排查。死锁的四个必要条件死锁不是凭空出现的,必须同时满足四个条件(Coffman 条件):条件含义打破方式互斥(Mutual Exclusion)锁只能被一个线程持有无法打破(锁的本质就是互斥)占有等待(Hold and Wait)持有一个锁的同时等待另一个锁一次性获取所有锁后再操作不可抢占(No Preemption)已获取的锁不能被强制释放使用