我有:
private final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
运行可运行任务:
executorService.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);
但看来 executorService
没有取消方法(wtf,为什么?),关闭它不是一个选项,我正在做一些相当简单的事情,所以使用 Executors.newScheduledThreadPool
(其中确实有 cancel()
)有点矫枉过正。
有没有办法正确停止任务的执行?
PS:我问之前就查了一下,我真的不认为这个hack是正确的方法。
最佳答案
executorService.scheduleAtFixedRate(task, 0, 1, TimeUnit.SECONDS);
返回 ScheduledFuture<V>
,其中确实有 cancel(boolean)
方法。
正确的取消方式是通过 future 取消。
编辑:但是我相信这不能在任务执行时停止它,只能阻止将来的执行。使用 boolean 标志要求任务了解 Thread.isInterrupted()
系统。
关于java - 如何停止Executors.newSingleThreadScheduledExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306855/