gpt4 book ai didi

java - 使用 guava AbstractScheduledService

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:12:36 27 4
gpt4 key购买 nike

我正在尝试使用 guava 定期执行一些任务 AbstractScheduledService :

public class MyService extends AbstractScheduledService {

public MyService() {

}

@Override
protected void runOneIteration() {
doStuff();
}

private void doStuff() {
// Do stuff
}

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

}

所以这个服务应该每 8 小时定期执行一些任务,但实际上它从来没有这样做过。继承的 isRunning() 方法返回 false 并且永远不会调用 runOneIteration() 方法。

我已经设法通过从我的服务构造函数调用 startAsync() 方法(继承自父类)使其工作,但我没有看到任何引用资料表明这是它应该工作的方式.

我在这里错过了什么吗?这就是 AbstractScheduledService 的工作方式吗?

最佳答案

AbstractScheduledServiced 实现 Service . Service 接口(interface)描述生命周期方法,包括 startAsyncServiceState枚举文字包含有关它们含义的文档。 NEW 状态的服务(刚刚创建):

A service in this state is inactive. It does minimal work and consumes minimal resources.

要让服务做一些有用的事情,您必须将其转换为状态 RUNNING

A service in this state is operational.

这就是为什么您必须在服务执行任何操作之前启动该服务。

我还建议不要从构造函数调用 startAsync,而是从创建 MyService 实例的代码中调用它。在构造函数中产生如此严重的副作用(创建线程)是很少见的事情。

关于java - 使用 guava AbstractScheduledService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25499811/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com