簡體   English   中英

javafx:如何設置ScheduledService在隨機時間間隔重啟自己?

[英]javafx: How to set ScheduledService to restart itself on a random time interval?

我有一個ScheduledService,通過設置setPeriod(Duration.seconds((int) 1 + Math.rand()*100))在隨機時間(從1到101秒)重新啟動。 如果隨機數為65,則服務系統每65秒重新啟動一次。

但是,我真正想要的是它將在每個周期的隨機(非固定)時間重新啟動。

更新:隨機,我的意思是它將為每次運行生成一個隨機數。 所以,也許服務將在接下來的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();
    }
}

您可以在完成當前運行的服務時更改它。

來自Docs:

如果在ScheduledService運行時更改了句點或延遲,則在下一次迭代時將考慮新值。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM