Java中锁获取的延迟通知

Java中锁获取的延迟通知,java,locking,java.util.concurrent,Java,Locking,Java.util.concurrent,我们有一个用例,需要获取一个锁,如果获取锁需要5分钟以上的时间,则需要发送通知。我们应该永远等着锁 我们使用的是重入锁和锁。tryLock(5,TimeUnit.Minutes)不够,因为它在5分钟后出现 我们尝试的方案是: while(!lock.tryLock(5, TimeUnit.minutes)) { // send notification } 但我猜,这将导致失去锁的公平性(请求锁的顺序) 是否有人面临此类用例,如果是,请解释如何解决 我们不希望在某些上下文中手动维护锁和

我们有一个用例,需要获取一个锁,如果获取锁需要5分钟以上的时间,则需要发送通知。我们应该永远等着锁

我们使用的是重入锁和锁。tryLock(5,TimeUnit.Minutes)不够,因为它在5分钟后出现

我们尝试的方案是:

while(!lock.tryLock(5, TimeUnit.minutes)) {
    // send notification
}
但我猜,这将导致失去锁的公平性(请求锁的顺序)

是否有人面临此类用例,如果是,请解释如何解决


我们不希望在某些上下文中手动维护锁和相应的等待线程的元信息(如为获取锁而启动时),而另一个线程连续轮询整个上下文以查看是否有任何等待线程等待超过5分钟。

设置ScheduledExecutorService。在获得锁之前,安排一个任务在5分钟内启动,并保持未来。获得锁后,取消未来

ScheduledExceutorService ses;
Future f = ses.schedule(new Runnable(){...}, 5, TimeUnit.Minutes);
lock.lock();
f.cancel();
如果在执行提交的任务之前获得锁,则应取消该锁