Java 如何停止Executors.newSingleThreadScheduledExecutor
我有: 运行可运行任务的:Java 如何停止Executors.newSingleThreadScheduledExecutor,java,multithreading,java-8,scheduled-tasks,Java,Multithreading,Java 8,Scheduled Tasks,我有: 运行可运行任务的: private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); 但是,executorService似乎没有取消方法(wtf,为什么?),关闭它不是一个选项,我正在使用executor做一些相当简单的事情。newScheduledThreadPool(它确实有cancel())有点过分了 有没有办法正确停止任务的执行 PS:我
private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
但是,executorService
似乎没有取消方法(wtf,为什么?),关闭它不是一个选项,我正在使用executor做一些相当简单的事情。newScheduledThreadPool
(它确实有cancel()
)有点过分了
有没有办法正确停止任务的执行
PS:我在询问之前搜索过,我真的认为这不是正确的方法。
executorService.scheduleAtFixedRate(任务,0,1,时间单位。秒)
返回一个ScheduledFuture
,它确实有一个方法。
取消它的正确方法是在将来取消它
编辑:但是我认为这不能在任务执行时停止任务,只能防止将来执行。使用布尔标志要求任务意识到
Thread.isInterrupted()
系统。您正在寻找shutDown*()
方法之一。我只有shutdownNow
和shutDown
fromexecutorService
两种方法,这两种方法都会阻止将来的任务,但我想要将来的任务@fgeSo I应该为ScheduledFuture
设置一个数据成员,并在调用scheduleAtFixedRate
时填充它?因为我需要从runnable包装中的任务本身停止任务。如果您只需要取消功能,只需从.run()
方法中抛出异常即可。合同明确规定这将停止今后的任何处决。但这不是例外情况吗?异常被认为是“运行时繁重的”,所以这不是有点贵吗?如果你不想使用异常,那么你需要某种包装器,使外部未来可用于任务,但这将是它自己的痛苦实现。这会从计划程序中删除任务吗。或者这只会使isDone()
方法返回true。我这样问是因为我使用的是ScheduledExecutorService scheduler=Executors.newSingleThreadScheduledExecutor();ScheduledFuture future=调度程序。scheduleAtFixedRate
executorService.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);