【发布时间】:2017-10-16 09:27:45
【问题描述】:
在this 论坛讨论的时间限制之后,我发现了一种停止运行定期后台任务的 Java ScheduledExecutorService 的方法。
就我而言,当某个条件为真时,我需要停止 ScheduledExecutorService。例如,一旦计数超过 5,我想停止打印“beep {count}”。为此,我使用了前面突出显示的示例。
public class BeeperControl {
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
private int count;
public void beep() {
final Runnable beeper = new Runnable() {
public void run() {
count = count + 1;
System.out.println("beep " + count);
if (count == 5) {
scheduler.shutdown();
}
}
};
final ScheduledFuture<?> beeperHandle = scheduler.scheduleAtFixedRate(
beeper, 1, 1, SECONDS);
}
public static void main(String[] args) {
BeeperControl bc = new BeeperControl();
bc.beep();
}
}
在这里,我检查了计数是否等于 5,然后使用scheduler.shutdown() 方法关闭了 ScheduledExecutorService。
我的问题是,对于给定的场景(因为 ScheduledExecutorService 被正在运行的任务关闭),这是否是一个好的做法,还是有更好的替代方案可以在这种场景中使用?
【问题讨论】:
标签: java executorservice scheduledexecutorservice