0
私は20秒ごとに実行するタスクを持っています。しかし、問題は、タスクが中断を引き起こすように遅延をかけることができるということです。スケジュールされたスレッドがタスクを完了したかどうかをチェックする方法は?
package client;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import static java.util.concurrent.TimeUnit.*;
import java.util.Date;
public class Bootstrap
{
public static void main(String[] args)
{
addThreadsToPool();
ServiceTest service1 = new ServiceTest();
}
public static void addThreadsToPool()
{
ScheduledThreadPoolExecutor eventPool = new ScheduledThreadPoolExecutor(5);
eventPool.scheduleAtFixedRate(new Updater(), 2, 20, SECONDS);
try {
Thread.sleep(20000);
} catch (InterruptedException ignored) {
}
}
}
この例では、クラスアップデータは20秒ごとに実行されますが、updaterの実行に20秒以上の時間がかかる場合は問題です。 次回のスケジュール実行前にUpdaterがタスクを終了させる方法は?
'Updater'が完了していなければ_cancel_したい場合は、' scheduleAtFixedRate'によって返された 'Future'を使用し、' Updater'をキャンセルに敏感にすることで(Updaterの中断状態に注意して)現在のスレッド)。 –
アップデーターがタスクを完了していない場合、アップデーターを取り消し、このタスクを実行するために時間を因子に掛けてより多くの時間を割り当てると、未来の部分をもっと説明してくれますか? –
2つの 'Updater'ジョブが同時に実行されないようにしようとしていますか? – Gray