0

我尝试使用 newSingleThreadScheduledExecutor 安排一个执行器,它在 10 天(从系统初始化开始)、20 天(从系统初始化开始)和每个月的 1 天后发送报告。我尝试使用每天运行的 newSingleThreadScheduledExecutor 并检查今天是否在 10 天之后.. 20 天等等。但是,我认为我们有一个更优雅的方法来解决这个问题。您知道如何改进我的代码吗?

调度器:

   scheduler.scheduleWithFixedDelay(() -> {
        try {
            createReport();
        } catch (Exception e) {
            log.error("Error to create engagement report", e);
        }
    }, 1, 1, TimeUnit.DAYS);

在 createReport 函数上 - 我检查日期。

谢谢!

4

1 回答 1

0

最终,我使用了在构造函数中初始化的 ScheduledExecutorService 计划:

scheduler.schedule(createTask , nextDayOfTask, TimeUnit.DAYS);

因此,每次我到达createTask- 我都会重新计算下一份报告应该何时发布并更新时间表。

public Runnable createTask = new Runnable() {
    @Override
    public void run() {
        // Do What Ever You Need 
        scheduler.schedule(this, nextDayOfTask, TimeUnit.DAYS);
    }
};
于 2017-09-11T10:22:40.207 回答