从ScheduledExecutorService中运行的任务本身中停止定期任务

在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较晚并且变量也设置得较晚时,存在一个潜在的窗口,并且任务本身可能已经运行,在引用中看到空值。)

回答:

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

以上是 从ScheduledExecutorService中运行的任务本身中停止定期任务 的全部内容, 来源链接: utcz.com/qa/431313.html

回到顶部