javafx:如何设置ScheduledService在随机时间间隔重启自己?

时间:2015-09-27 12:46:37

标签: java javafx

我有一个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();
    }
}

1 个答案:

答案 0 :(得分:4)

您可以在完成当前正在运行的服务时更改它。

来自文档:

  

如果在ScheduledService运行时更改了句点或延迟,则在下一次迭代时将考虑新值。

service.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
     @Override
     public void handle(WorkerStateEvent t) {
          service.setPeriod(Duration.seconds(1 + Math.random()*100));
     }
});