У нас есть вариант использования, когда нам нужно получить блокировку и отправить уведомление, если получение блокировки занимает более 5 минут. Мы все еще должны ждать блокировки навсегда.
Мы используем повторные блокировки, и lock.tryLock(5, TimeUnit.Minutes) недостаточно, так как он открывается через 5 минут.
Вариант, который мы пробовали, был:
while(!lock.tryLock(5, TimeUnit.minutes)) {
// send notification
}
Но я предполагаю, что это приведет к потере справедливости блокировки (порядок, в котором блокировка была запрошена)
Сталкивался ли кто-нибудь с такими вариантами использования, если да, объясните, пожалуйста, как это решалось.
Мы предпочитаем не использовать ручное решение для поддержки блокировок и соответствующей метаинформации потока ожидания (например, когда он был инициирован для получения блокировки) в каком-то контексте, а другой поток постоянно опрашивает весь этот контекст, чтобы увидеть, есть ли в нем какие-либо потоки ожидания, ожидающие блокировки. более 5 минут.