如何检查预定的线程是否完成了任务?

时间:2016-09-07 14:01:15

标签: java multithreading concurrency

我有一个每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在下一次计划执行之前完成任务呢?

1 个答案:

答案 0 :(得分:0)

除了对Updater进行编码以便在不到20秒的时间内完成,没有别的办法。从严格意义上讲,这是不可能的,因为可能会在CPU上安排线程,可能会发生长时间的GC暂停等。如果在任务中运行循环,它可以定期检查时间并在中止到达截止日期时中止。 / p>