描述

一个任务A正在运行,可以持续2s至60+s。

当A运行时,我安排了执行权限服务,该执行人员服务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已完成”。 但是只有我的计划ExecutorService任务已经开始, ,这意味着它至少打印一次“运行”一次。

  • 如果在10秒之前完成,我什么都没打印。
  • 如果A的需要超过10秒,则我每5次打印一次“运行”,然后在A完成后“完成”。

我怎么能在不使用布尔旗的情况下做到这一点 runnable. 。有没有办法检查我的服务开始的?

有帮助吗?

解决方案

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.");
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top