我正在寻找可以帮助我实现以下模式(伪代码)的机制:
TimeoutLock lock = new TimeoutLock();
while(condition) {
prepare();
lock.enter(); //cannot enter until specified lock timeout elapses
execute();
lock.lockFor(2 minutes);
finish();
}
我需要将执行的调用限制为不比某个指定的时间间隔(例如,两分钟)更频繁地发生,但如果没有必要,我不想阻止准备或执行。我想知道java是否支持任何锁定机制,一段时间后会“消失”。当然,要求是即使它是由锁定它的同一个线程进入的,锁也不会通过。
我正在考虑涉及 semaphore 和TimerTask的解决方案,或者自己计算截止日期并睡多余的时间,但我想知道这样的东西是否已经可用。
谢谢