1

描述

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

在 A 运行时,我安排了一个 ExecutorService,它在 10 秒(延迟)后每 5 秒打印一次“运行”(固定速率)。

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 完成后“完成”。

如果不在 schduled 中使用布尔标志,我怎么能做到这一点runnable?有没有办法检查我的服务是否已启动?

4

1 回答 1

2
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.");
}
于 2013-11-08T05:19:53.940 回答