2015-11-26 34 views
3

Java Docs for Lock在方法locklockInterruptiblytryLock的文档中包含以下声明。是否有执行死锁检测的Lock实现?

锁定实现可能能够检测到锁的错误使用,例如会导致死锁的调用,并且可能会在此类情况下抛出(未检查)异常。该情况和异常类型必须由该Lock实现记录。

在Java 8 API中有没有实现Lock接口,实际上试图检测这种“错误的使用”?

+0

请注意javadoc如何说可能会误用一个死锁。另一种可能的误用是尝试解锁已经解锁的锁;和所有可用的实现这样做(我相信他们在这种情况下抛出'IllegalMonitorStateException';没有检查) – fge

+0

我特别要求关于锁定 - 我找不到任何实现提到除''tryLock'上的InterruptedException之外的任何其他的引用......我知道,解锁一个你不拥有引号的锁“可能会抛出一个(未经检查的)异常”,但那是不同的。 – Hulk

+1

如果第三方库是公平的游戏,Guava的['CycleDetectingLockFactory'](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/CycleDetectingLockFactory.html)可能是你在找什么样的东西? –

回答

0

于是,经过一些调查研究我得出的结论是,答案显然是:

没有标准Java API 8尝试做这样的事情的Lock实现。

然而,有些库具有检测(潜在)死锁的机制,这些死锁使用锁定方法的Java Doc中给出的明确许可来抛出RuntimeException。这种机制的一个例子是Louis Wasserman在评论中提到的Guava's CycleDetectingLockFactory