执行者以不同的时间间隔进行调度

Executors Schedule in different intervals

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

调度程序:

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

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

谢谢!

最终,我使用在构造函数中初始化的 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);
    }
};