我遇到了一種停止運行週期性後臺任務的Java ScheduledExecutorService的方法,時間限制在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是由正在運行的任務關閉的),還是有更好的方法可以用於這種情況?