线程 A 已经拿到了资源 1,线程 B 也拿到了资源 2。接下来,线程 A 想继续往下走,需要资源 2;线程 B 想继续往下走,又需要资源 1。
两个线程都没抛异常,也不是 CPU 把机器打满了。线上看到的现象可能只是几个请求一直不返回,线程池里的工作线程慢慢被占住。
这类问题麻烦就麻烦在这里:程序没有“算错”,而是卡在一条自己解不开的等待链上。
线程死锁说的就是这种情况:一组线程互相等对方释放资源,等待关系绕成闭环,参与其中的线程都没办法靠自己继续执行。
如果这些线程正好承载订单、支付、库存这类关键流程,外部看到的就不只是某个线程 BLOCKED 了,而是接口超时、队列堆积,甚至进程迟迟退不干净。
2026/6/13大约 28 分钟
