java - 在 ScheduledExecutorService 中运行的任务本身中停止周期性任务

标签 java concurrency anonymous-class executorservice variable-initialization

在 ScheduledExecutorService 中运行时,有没有一种很好的方法可以从任务本身中停止重复任务?

假设,我有以下任务:

Future<?> f = scheduledExecutor.scheduleAtFixedRate(new Runnable() {
    int count = 0;
    public void run() {
       System.out.println(count++);
       if (count == 10) {
           // ??? cancel self
       }
    }
}, 1, 1, TimeUnit.SECONDS);

在外部,通过 f.cancel() 很容易取消,但是如何在指定位置停止重复呢? (通过 AtomicReference 传递 Future 是不安全的,因为当 scheduleAtFixedRate 返回 f 并且变量设置也很晚时存在潜在的窗口,并且任务本身可能已经运行,在引用中看到 null。)

最佳答案

当重复任务抛出异常或错误时,它被放置在 Future 中,并且该任务不再重复。您可以选择抛出 RuntimeException 或 Error。

关于java - 在 ScheduledExecutorService 中运行的任务本身中停止周期性任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4909824/

相关文章:

java - 在 JFrame 中引用 JPanel 的坐标

Python多线程和不一致的输出

java - final 字段和匿名类

java - 一般匿名类实例化问题

java - 我可以使用ProcessingJS编译器将Java代码转换为JavaScript以用于非ProcessingJS目的吗?

java - 如何将临时ArrayList中的元素复制到新创建的对象中的私有(private)ArrayList中?

multithreading - 核心数据保存竞争条件错误

PHP/MySQL 并发 - 写依赖于读 - 临界区

java - 在 Java 中引用来自匿名类的变量

java - 在 Java 中打开 RandomAccessFile 意味着什么?