事前に最小粒度がわからない
その場合、スケジュールをキャンセルして再度追加する必要があります。
private Future future = null;
private long periodMS = 0;
public void setPeriod(long periodMS) {
if (future != null && this.periodMS == periodMS) return;
if (future != null) future.cancel(false);
scheduledExecutorService.scheduleWithFixedDelay(task, periodMS/2, periodMS, TimeUnit.MILLI_SECONDS);
}
または、タスク自体を再スケジュールすることもできます。
private long periodMS;
public void start() {
scheduledExecutorService.schedule(this, periodMS, TimeUnit.MILLI_SECONDS);
}
public void run() {
try {
task.run();
} catch(Exception e) {
// handle e
}
start();
}
このようにして、期間は実行されるたびに変更できます。