在 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/