AbstractScheduledService取消runOneIteration

时间:2018-05-25 15:40:57

标签: java guava

我使用AbstractScheduledService来运行特定时期的任务。任务是检查,以查看是否达到特定状态。如果达到了所需的状态,我想中止runOneIteration()并关闭执行程序。

它是我的用例的正确库吗?如果没有,我应该使用哪个库,如果是,我该如何解决这个问题。在stopAsync内拨打runOneIteration()会导致java.util.concurrent.RejectedExecutionException。我搜索了很多,但没有找到有用的答案,只是取消了预定的服务,如果达到特定的状态。

@Override
protected void startUp ()
{
    LOGGER.log(Level.INFO, () -> "Start-Up of service");
}

@Override
protected void shutDown ()
{
    LOGGER.log(Level.INFO, () -> "Shut-Down of service");
}

@Override
protected void runOneIteration ()
{
    boolean result = this.checkIfServerIsOnline();
    if (result)
        // abort runOneIteration and shutdown scheduler
    else
        // continue check
}

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

0 个答案:

没有答案