Java 我应该使用这两种方法中的哪一种来正确停止调度线程?

Java 我应该使用这两种方法中的哪一种来正确停止调度线程?,java,multithreading,scheduled-tasks,scheduledexecutorservice,Java,Multithreading,Scheduled Tasks,Scheduledexecutorservice,我创建了一个简单的任务,每两分钟运行一次,一旦布尔值变为真,我就要停止这个任务 ScheduledExecutorService scheduledxecutor = Executors.newScheduledThreadPool(1); ScheduledFuture<?> scheduledFuture = scheduledExecutor.scheduleAtFixedRate(drawRunnable , 0, 2, TimeUnit.MINUTES); Schedu

我创建了一个简单的任务,每两分钟运行一次,一旦布尔值变为真,我就要停止这个任务

ScheduledExecutorService scheduledxecutor = Executors.newScheduledThreadPool(1);

ScheduledFuture<?> scheduledFuture = scheduledExecutor.scheduleAtFixedRate(drawRunnable , 0, 2, TimeUnit.MINUTES);
ScheduledExecutorService scheduledxecutor=Executors.newScheduledThreadPool(1);
ScheduledFuture ScheduledFuture=scheduledExecutor.scheduleAtFixedRate(drawRunnable,0,2,TimeUnit.MINUTES);
我一直在stackoverflow周围徘徊,我基本上发现我需要使用
scheduledFuture.cancel(false)
scheduledExecutor.shutdown()

我应该用哪一个

scheduledExecutor.shutdown()是更好的选择,因为它可以优雅地开始关闭所有提交的任务,而scheduledFuture.cancel(false)仅处理该特定任务


如果executor服务没有任何任务,它将保持活动状态,并准备再次使用。一些资源仍然被封锁。如果您仅将executor用于此单个任务,那么最好使用
scheduledExecutor.shutdown()
。它将等待当前任务完成,而不会启动新任务。因此,即使任务正在运行,也可以安全地调用它

但是,如果您向该executor服务添加了更多任务,则最好仅取消特定任务。然后,您将确保不会取消任何其他任务