(аналогично «Сбрасываемый таймер Java» , но есть некоторые тонкости, которые мне нужно изучить)
Мне нужна функция сбрасываемого тайм-аута, так что если мой класс не выполняет определенныйдействие в интервале времени T0 (где T0 находится в окрестности 50-1000 мсек), затем вызывается метод:
class MyClass {
static final private timeoutTime = 50;
final private SomeTimer timer = new SomeTimer(timeoutTime,
new Runnable () { public void run() {
onTimeout();
}});
private void onTimeout() { /* do something on timeout */ }
public void criticalMethod() { this.timer.reset(); }
}
Что я могу использовать для реализации этого?Я знаком с ScheduledExecutorService и с идеей вызова ScheduledFuture.cancel () , а затем переназначения задачи кажется такой, как будто она должна работать, но естьпотенциальная опасность, если метод cancel () завершится неудачно и запланированное задание будет выполнено, когда оно не должно.Я чувствую, что мне здесь не хватает тонкости.
Также (возможно, более важно), есть ли способ проверить мою реализацию / доказать, что она работает правильно?
edit: Меня особенно беспокоит случай, когда criticalMethod()
часто вызывается (возможно, несколько раз в миллисекунду) ... если я использую ScheduledExecutorService, это просто кажется потенциальной проблемой с ресурсами, чтобы продолжать создавать новые запланированные задачи + отменять старыевместо прямого способа перенести задачу.