Ответ 1
В этом случае вам нужен только вызов shutdown()
.
В ScheduledThreadPoolExecutor
есть два варианта: это то, что создается за кулисами здесь. getExecuteExistingDelayedTasksAfterShutdownPolicy()
по умолчанию установлено значение true
и getContinueExecutingPeriodicTasksAfterShutdownPolicy()
по умолчанию false
. Таким образом, просто выключение службы вызовет периодические задачи, которые будут отменены, но любые отложенные задачи будут выполняться. Поскольку задача, о которой идет речь, является периодической задачей, она будет отменена при завершении работы.
Мое личное мнение состоит в том, что лучше вызывать .cancel(true)
вручную перед выключением. Хотя в оперативном режиме это не имеет никакого эффекта, я думаю, что это хорошо для программистов, которые могут не знать вариантов у исполнителя, чтобы увидеть, что периодическая задача должна быть отменена при завершении работы. Это также означает, что если кто-либо когда-либо приходит и меняет исполнителя на тот, который не отменяется при завершении работы, эта задача все равно будет отменена. Так что, на самом деле, я думаю, что основное преимущество здесь - ясность кода.