如何验证ScheduledExecutorService已启动?

时间:2013-11-08 02:14:40

标签: java java-7 scheduledexecutorservice

说明

任务A正在运行,可以持续2秒到60秒。

当A正在运行时,我安排了一个ExecutorService,在10s(延迟)之后,每隔5s(固定速率)打印“运行”。

ScheduledExecutorService scheduleNotifications = Executors
        .newSingleThreadScheduledExecutor();
scheduleNotifications.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

一旦A完成,我希望打印“A已完成”。 但仅当我的ScheduledExecutorService任务已启动时,这意味着它至少打印了一次“运行”。

  • 如果A在10秒前完成,我不会打印任何内容。
  • 如果A超过10秒,我每隔5秒打印一次“运行”,然后在A完成后“完成”。

如果不在计划runnable内使用布尔标志,我怎么能这样做呢?有没有办法检查我的服务是否已启动?

1 个答案:

答案 0 :(得分:1)

ScheduledThreadPoolExecutor scheduler = new ScheduledThreadPoolExecutor(1);
scheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("A is running");
    }
}, 10, 5, TimeUnit.SECONDS);

Thread.sleep(20000);
scheduler.shutdown();
if (scheduler.getCompletedTaskCount() > 0) {
    System.out.println("A is done.");
}