Вы можете использовать флаг AtomicBoolean
, который указывает, что задача уже запущена:
private final AtomicBoolean running = new AtomicBoolean(false);
А затем в запланированном методе
if (running.compareAndSet(false, true)) {
log.info("The time is {}", Instant.now());
running.set(false);
}
Из javado c из compareAndSet(expect, update)
:
Атомарно устанавливает значение для данного обновленного значения, если текущее значение == ожидаемое значение.
Возвращает : true
в случае успеха. False
return указывает, что фактическое значение не было равно ожидаемому.
Итак, if
проверит, что в данный момент не запущена ни одна задача, и только тогда выполнит ваш код.