从在 ScheduledExecutorService 中运行的任务本身中停止定期任务
2022-09-02 01:42:09
在 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()取消很容易,但是我该如何在指定的地方停止重复呢?(通过原子引用传递未来是不安全的,因为当调度AtFixedRate延迟返回f并且变量也设置延迟时,存在一个潜在的窗口,并且任务本身可能已经运行,在引用中看到空值。