Guava:awaitRunning()方法是否保证在返回之前调用runOneIteration()?

时间:2017-11-16 20:18:07

标签: java guava

我需要启动一项服务,扩展Guava中的服务AbstractScheduledService。我希望以这样一种方式启动服务,即通过运行它的start方法启动服务后立即执行runOneIteration()方法。

我不想使用startAsync()方法,因为它会异步返回。

如果我使用awaitRunning(),则说明文档仅在服务达到 RUNNING 状态后才会返回。但这是否保证在返回之前调用runOneIteration()?如果没有,有什么办法可以保证在启动服务之前至少调用runOneIteration()一次。

这是一种方法:

  1. 如果我覆盖startUp()方法并在其中调用runOneIteration(),这是否会起作用?

    @Override
    public void startUp() {
    runOneIteration();
    }
    

1 个答案:

答案 0 :(得分:0)

这是我用来解决这个问题的肮脏黑客。

public void start() {
  runOneIteration();
  startAsync();
}

@Override
protected Scheduler scheduler() {
    return Scheduler.newFixedRateSchedule(0, 10, TimeUnit.SECONDS);
}

我在此服务上调用start()方法。

serviceName.start();

这可确保在调用runOneIteration时执行serviceName.start()次。