2

名前が示すように、Executor サービスを使用してデーモンをスケジュールするデーモン フレームワークがあります。

java.util.concurrent.ScheduledThreadPoolExecutor.scheduleWithFixedDelay(Runnable 
     command, long initialDelay, long delay, TimeUnit unit)

Runnable実行時に、アプリケーションを終了せずに、クラスの 2 つの実行間の遅延を変更したいと考えています。

出来ますか?はいの場合、どのように?

4

1 に答える 1

3

事前に最小粒度がわからない

その場合、スケジュールをキャンセルして再度追加する必要があります。

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

このようにして、期間は実行されるたびに変更できます。

于 2012-10-08T08:37:11.807 に答える