2015-11-26 2 views
3

Java Docs for Lock содержит следующее заявление в документации по Методам lock, lockInterruptibly и tryLock.Есть ли реализация блокировки, которая выполняет обнаружение блокировки?

Реализация блокировки может обнаруживать ошибочное использование блокировки, такую ​​как вызов, который вызывает тупик, и может вызывать (непроверенное) исключение при таких обстоятельствах. Обстоятельства и тип исключения должны быть документированы реализацией Lock.

Есть ли реализация интерфейса Lock в API Java 8, который фактически пытается обнаружить такое «ошибочное использование»?

+0

Обратите внимание, что в javadoc говорится, что тупик - это одно из возможных злоупотреблений. Другим возможным злоупотреблением является попытка и разблокировка блокировки, которая уже разблокирована; и все доступные реализации делают это (я считаю, что они бросают «IllegalMonitorStateException» в этом случае, не проверены) – fge

+0

Я специально спрашиваю о блокировке - я не мог найти никакой реализации, говоря о метании чего-либо другого, кроме InterruptedException, на 'tryLock' ... Я знаю, что при разблокировке Lock у вас нет собственной цитаты «может бросить (непроверенное) исключение», но это что-то другое. – Hulk

+1

Если сторонние библиотеки являются честной игрой, Guava ['CycleDetectingLockFactory'] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/util/concurrent/CycleDetectingLockFactory.html) может быть что вы ищете? –

ответ

0

Так, после еще некоторых исследований я пришел к выводу, что ответ, по-видимому:

No. Ни одна из реализаций блокировки в стандартной Java 8 API попытка сделать что-то подобное.

Есть, однако, некоторые библиотеки, которые имеют механизмы для обнаружения (потенциальных) взаимоблокировок, которые используют явное разрешение для выброса RuntimeException s, которое дано в Java Doc методов блокировки. Одним из примеров такого механизма является Guava's CycleDetectingLockFactory, о котором упоминал Луис Вассерман в комментариях.

Смежные вопросы