2015-09-27 107 views
2

我有一個ScheduledService,通過設置setPeriod(Duration.seconds((int) 1 + Math.rand()*100))隨機時間(從1秒到101秒)重新啓動。如果隨機數是65,那麼服務系統地每65秒重新啓動一次。javafx:如何設置ScheduledService以隨機時間間隔重新啓動?

但是,我真正想要的是它會在每個週期的隨機(而不是固定)時間重新啓動。

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(); 
    } 
} 

回答

3

你可以改變它的當前運行服務的完成。

從文檔:

如果在ScheduledService運行週期或延遲發生變化,新的值將考慮在下一次迭代。

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