簡體   English   中英

如何檢查預定線程是否已完成任務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM