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