我需要启动一项服务,扩展Guava中的服务AbstractScheduledService
。我希望以这样一种方式启动服务,即通过运行它的start方法启动服务后立即执行runOneIteration()
方法。
我不想使用startAsync()
方法,因为它会异步返回。
如果我使用awaitRunning()
,则说明文档仅在服务达到 RUNNING 状态后才会返回。但这是否保证在返回之前调用runOneIteration()
?如果没有,有什么办法可以保证在启动服务之前至少调用runOneIteration()
一次。
这是一种方法:
如果我覆盖startUp()
方法并在其中调用runOneIteration()
,这是否会起作用?
@Override
public void startUp() {
runOneIteration();
}
答案 0 :(得分:0)
这是我用来解决这个问题的肮脏黑客。
public void start() {
runOneIteration();
startAsync();
}
@Override
protected Scheduler scheduler() {
return Scheduler.newFixedRateSchedule(0, 10, TimeUnit.SECONDS);
}
我在此服务上调用start()
方法。
serviceName.start();
这可确保在调用runOneIteration
时执行serviceName.start()
次。