在 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。)