Java 我首先要做什么-取消ScheduledFuture或关闭ScheduledExecutorService?

Java 我首先要做什么-取消ScheduledFuture或关闭ScheduledExecutorService?,java,multithreading,Java,Multithreading,我的代码: ScheduledServiceExecutor service = Executors.newSingleThreadScheduledExecutor(); ScheduledFuture future = service.scheduleWithFixedDelay( runnable, 1, 1, TimeUnit.MILLISECONDS ); // ... // now it's time to shut it all down future.cancel(true)

我的代码:

ScheduledServiceExecutor service = Executors.newSingleThreadScheduledExecutor();
ScheduledFuture future = service.scheduleWithFixedDelay(
  runnable, 1, 1, TimeUnit.MILLISECONDS
);
// ...
// now it's time to shut it all down
future.cancel(true);
service.shutdown();
我就在这里吗?也许我应该这样做:

service.shutdown();
future.cancel(true);

您觉得怎么样?

在这种情况下,您只需要调用
shutdown()

ScheduledThreadPoolExecutor
中有两个选项,这是在幕后创建的
GetExecuteeExistingDelayedTasksAftershutdownPolicy()
默认为
true
getContinueExecutingPeriodicTasksAfterShutdownPolicy()
默认为
false
。因此,简单地关闭服务将导致定期任务被取消,但任何延迟的任务仍将被执行。由于所讨论的任务是周期性任务,因此将在关机时取消该任务

我个人的意见是,最好在关机前手动调用
.cancel(true)
。虽然这在操作上没有什么不同的效果,但我认为对于那些可能不知道执行器选项的程序员来说,看到定期任务在关机时被取消是件好事。这也意味着,如果有人进来并将执行器更改为关机时不会取消的执行器,此任务仍将被取消。所以说真的,我认为这里的主要好处是代码清晰