【发布时间】:2013-11-17 19:54:15
【问题描述】:
我想知道Lock 检测周期有多复杂,它有多少开销。实际上,我认为它应该相当简单,但是 Java 中缺少它让我不确定。
an answer 推荐使用 tryLock,但恕我直言,这种检测是语言应该提供的开箱即用的东西(作为一个选项)。
我发现的唯一类似的东西是 Guava 的 CycleDetectingLockFactory,但它有一些不平凡的开销和 doesn't try 来捕获所有死锁。
【问题讨论】:
-
银行家算法呢?
-
@Trying:不......它做了两个完全不充分的假设:1.每个线程都事先知道它可能需要什么。 2. 每个资源有多个实例。银行家的算法可能适用于某些问题,但如果不满足假设,它就什么也做不了。
-
问题不在于它要花多少钱,而在于其他程序员愿意牺牲多少来让你不小心使用锁定。有些甚至不会给你一个 CPU 时钟周期。所以最好的建议是:清理你的代码而不是要求自动解决方案。尤其是检测仍然不能解决问题。它只会告诉你。顺便说一句:JVM有死锁检测,但不是自动的;它是由线程堆栈转储触发的。
-
如果可能使用有序锁(不确定技术术语是什么),所以死锁是不可能的。
-
@Holger:其他程序员根本不需要支付任何费用,因为检测可以是可选的。除了
StandardLockFactory之外,还有一个DeadlockDetectingLockFactory,它是完全免费的。但我可能同意 JVM 检测已经足够好了。
标签: java concurrency deadlock guava