我有一个ScheduledService,它通过设置setPeriod(Duration.seconds((int) 1 + Math.rand()*100))
在随机时间(从1到101秒)重新启动。如果随机数为65,则服务系统地每65秒重新启动一次。
但是,我真正想要的是它会在每个周期的随机(非固定)时间重新启动。
UPDATE:随机,我的意思是它会为每次运行生成一个随机数。所以,也许服务将在接下来的10秒再次重启,下一次100秒,下一次35秒。
我怎样才能做到这一点?
class Foo
private final ScheduledService<Item> service = new ScheduledService<Item>() {
@Override
public Task<Item> createTask(){
return new Task<Item>() {
@Override
public Item call() throws Exception {
return //Item object
}
};
}
};
// constructor
public Foo(){
service.setPeriod(Duration.seconds((int) 1 + Math.rand()*100));
....
service.startMonitoring();
}
public final void startMonitoring() {
service.restart();
}
public final void stopMonitoring() {
service.cancel();
}
}
答案 0 :(得分:4)
您可以在完成当前正在运行的服务时更改它。
来自文档:
如果在ScheduledService运行时更改了句点或延迟,则在下一次迭代时将考虑新值。
service.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent t) {
service.setPeriod(Duration.seconds(1 + Math.random()*100));
}
});