首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中锁获取的延迟通知

Java中锁获取的延迟通知
EN

Stack Overflow用户
提问于 2011-10-11 22:42:34
回答 1查看 189关注 0票数 2

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

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

我们尝试的选项是:

代码语言:javascript
复制
while(!lock.tryLock(5, TimeUnit.minutes)) {
    // send notification
}

但我猜,这将导致失去锁的公平性(请求锁的顺序)

有没有人遇到过这样的用例,如果有,请解释是如何解决的。

我们不喜欢在某些上下文中手动维护锁和相应等待线程的元信息(例如,当它被启动以获取锁时),而另一个线程不断轮询整个上下文,以查看是否有等待线程等待超过5分钟。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-11 23:05:52

设置ScheduledExecutorService。在获取锁之前,计划一个任务在5分钟内触发并保存未来。获取锁后,取消Future。

代码语言:javascript
复制
ScheduledExceutorService ses;
Future f = ses.schedule(new Runnable(){...}, 5, TimeUnit.Minutes);
lock.lock();
f.cancel();

如果您在提交的任务执行之前获取了锁,则应取消该锁。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7727859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档