【发布时间】:2012-11-22 18:13:26
【问题描述】:
我正在寻找可以帮助我实现以下模式(伪代码)的机制:
TimeoutLock lock = new TimeoutLock();
while(condition) {
prepare();
lock.enter(); //cannot enter until specified lock timeout elapses
execute();
lock.lockFor(2 minutes);
finish();
}
我需要将调用限制为 execute,使其发生的频率不超过某个指定的时间间隔(例如,两分钟),但我不想阻止 prepare或执行(如果没有必要)。我想知道java是否支持任何锁定机制,一段时间后会“消失”。要求当然是锁不通过,即使它是由同一个线程进入的,从而锁定它。
我正在考虑涉及信号量和TimerTask的解决方案,或者自己计算截止日期并睡多余的时间,但我想知道这样的东西是否已经可用。
谢谢
【问题讨论】:
-
您应该绝对不要将其设计为在超时期间阻塞线程。调度方法是必须的。
-
我会在 ScheduledThreadPoolExecutor 或 DelayQueue 周围使用包装器。
-
调度会好很多,我同意。但是您能否简要解释一下为什么阻塞线程(任何线程?或者只是一个主线程?)是一件坏事?