У меня есть блок кода, который должен выполняться только одним потоком за раз. Если в этот блок приходит новый поток - он должен отменить предыдущее выполнение и начать новый.
Примером является кэш обновления:
public void refreshCache() {
//refresh cache can take up to 20 minutes
}
Конечно, я могу запустить это с CompletableFuture
, сохранить Future
в AtomicReference
и отменить его, когда появится новый поток , Но это единственный вариант, который я имею в виду.
Существуют ли передовые методы работы с такими случаями? Каким будет решение, если я хочу запустить несколько экземпляров службы?