java - 如何停止Executors.newSingleThreadScheduledExecutor

标签 java multithreading java-8 scheduled-tasks

我有:

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/

相关文章:

Java 8 流 : can you capture/reuse a value calculated in a filter?

仿函数上的 Java8 热点

java - 关于开发基于AppEngine的ERP软件

java - 返回泛型类型 <String,Double>

c# - Lock 语句如何确定授予对象访问权限的顺序?

c# - System.Timers.Timer 几毫秒后第二次触发

java - 如何将 Java 8 Streams 与 InputStream 一起使用?

Java SSL 错误 403 禁止访问

java - 即使我在正确的域中,Selenium addCookie 也会出现无效的 Cookie 域异常

java - 无法从另一个线程调用 constraintLayout.remove();