我有ScheduledExecutorService
这样:
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(command, 0L, rate, TimeUnit.MILLISECONDS);
在某些时候,我需要将其关闭。但在此之前,我需要确保command
最后一次运行。像
public void shutdown() {
executor.waitOneMoreTime();
executor.shutdown();
}
我该怎么做?如果我做
public void shutdown() {
executor.shutdown();
executor.awaitTermination(rate, TimeUnit.MILLISECONDS);
}
我的理解是command
预定的executor.shutdown()
将无法保证在{{1}}之后再次运行。是吗?
答案 0 :(得分:1)
试试这样:
public void shutdown() {
try {
executor.awaitTermination (rate, TimeUnit.MILLISECONDS);
executor.shutdown();
} catch(InterruptedException e) {
// log your error
}
}
答案 1 :(得分:1)
你可以这样做:
executor.submit(command);
executor.awaitTermination(1000, TimeUnit.MILLISECONDS);
executor.shutdown();
应该调整时间以适应关闭所需的任何时间而不是预定的费率。