Java 死锁检测的成本有多高?

Java 死锁检测的成本有多高?,java,concurrency,deadlock,guava,Java,Concurrency,Deadlock,Guava,我想知道锁检测周期有多复杂,它的开销有多大。实际上,我相信它应该相当简单,但是Java中缺少它让我不确定 有人建议使用tryLock,但这种检测是语言应该提供的现成功能(作为选项) 我发现的唯一相似的东西是Guava的,但它有一些不平凡的开销,并且可以捕获所有死锁。我相信它可能是O(N**3),因为您可以在对象上持有X个锁,每个对象都由Y个其他线程等待,它们可以各自持有Z个锁。然后你必须对它们进行拓扑排序以检测周期。银行家算法呢?@尝试:不。。。。它提出了两个完全不充分的假设:1。每个线程预先知

我想知道
锁检测周期有多复杂,它的开销有多大。实际上,我相信它应该相当简单,但是Java中缺少它让我不确定

有人建议使用
tryLock
,但这种检测是语言应该提供的现成功能(作为选项)


我发现的唯一相似的东西是Guava的,但它有一些不平凡的开销,并且可以捕获所有死锁。

我相信它可能是O(N**3),因为您可以在对象上持有X个锁,每个对象都由Y个其他线程等待,它们可以各自持有Z个锁。然后你必须对它们进行拓扑排序以检测周期。

银行家算法呢?@尝试:不。。。。它提出了两个完全不充分的假设:1。每个线程预先知道它可能需要什么。2.每个资源都有多个实例。银行家算法可能适用于某些问题,但如果不满足这些假设,它就什么也做不了。问题不在于它的成本有多高,而在于其他程序员愿意牺牲多少来允许您随意使用锁定。有些甚至不会给你一个CPU时钟周期。因此,最好的建议是:清理代码,而不是要求自动解决方案。尤其是检测仍然不能解决问题。它只会告诉你这件事。顺便说一下:JVM有死锁检测,但它不是自动的;它是由线程堆栈转储触发的。如果可能的话,使用有序锁(不确定技术术语是什么),因此死锁是不可能的。@Holger:其他程序员根本不需要支付任何费用,因为检测是可选的。除了
标准锁工厂
之外,还有一个
死锁检测锁工厂
,这是完全免费的。但我可能同意JVM检测已经足够好了。