[英]how to check if a scheduled thread has finished the task?
我有一個任務,每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在下一次計划執行之前完成ites任務?
除了編碼更新程序外,別無其他方法,以便在不到20秒的時間內完成更新程序。 從嚴格的意義上講,這是不可能的,因為可能在CPU之外調度了線程,可能會發生長時間的GC暫停等。如果在任務內運行循環,則它可能會定期檢查時間並在達到期限時中止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.