介绍 之前看到的别人用GO语言写了一个死锁检测工具,大概看了一下的实现原理,然后自己就用JAVA写了一次。 原项目链接 作用 在开发调试期,帮助排查程序中的死锁情况。 原理 LockHolder保存了整个进程所有线程与锁之间的持有关系,每次上锁时,都判断一下这次上锁是否会造成死锁死锁的话抛出异常,并打印相对应的信息。 死锁不一定发生在两个线程之间,有可能出现在多个线程之间交叉出现。 线程A---争取---锁1---属于---线程B---争取---锁2---属于---线程C---争取---锁3---属于---线程A 所以,在检测死锁的时候,递归遍历每层锁与线程的关系,当检测到会形成回路(即发生死锁的时候)的时候,退出递归,报错。 看了一下原作者的实现,好像并不是用递归,等考完试有空再看看原作者是怎么实现检测多个线程之间的锁。 用法 例如,用ReentrantLock,正常开发的时候,我们可