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) {
}
}
}
在這個例子中,類Updater每20秒執行一次,問題是如果updater的執行花費的時間超過20秒。 那麼如何讓Updater在下一次預定執行之前完成它的任務呢?
如果你想_cancel_' Updater'如果還沒有完成,你可以使用'scheduleAtFixedRate'返回的'Future'並使'Updater'對取消非常敏感(注意中斷的狀態當前線程)。 –
你會解釋更多的未來部分,如果updater沒有完成任務,我會取消更新並分配更多的時間來執行此任務的時間乘以一個因子? –
您是否試圖確保2個'Updater'作業不能同時運行? – Gray