Предположим, я планирую задачу с помощью ScheduledThreadPoolExecutor и получаю Future обратно.
Позже я решаю, что хочу отменить это Future, и полагаюсь на возвращаемое значение cancel для запуска некоторой операции очистки. Я не хочу, чтобы задача прерывалась, если она уже выполняется (поэтому я передаю false в качестве аргумента).
Является ли возврат отмены надежным? То есть, возможно ли, что если команда cancel вернула значение true, задача действительно выполняется?
Глядя на код в OpenJDK 8, похоже, что могло быть состояние гонки, при котором «отмена» устанавливает состояние задачи как ОТМЕНЕН и возвращает истину, но бегун, возможно, уже прошел «проверку», чтобы начать выполнение.
Насколько я понимаю, вычисление будет выполнено, но результат не будет установлен (что хорошо). Однако в моем случае «вычисление» имеет побочные эффекты, поэтому я хочу знать, действительно ли я отменил его или нет.