我正在尝试使用 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)描述了生命周期方法,包括 startAsync
。 ServiceState 枚举文字包含有关其含义的文档。处于 NEW
状态的服务(刚刚创建):
为了让服务做一些有用的事情,你必须将它转换到状态 RUNNING
这就是为什么你必须在它做任何事情之前启动服务。
我还建议不要从构造函数调用 startAsync,而是从创建 MyService
实例的代码中调用它。在构造函数中产生如此严重的副作用(线程的创建)很少是预料之中的事情。
关于java - 使用 Guava AbstractScheduledService,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25499811/