执行人以不同的时间间隔安排

时间:2017-09-10 11:53:48

标签: java scheduler executors

我尝试使用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函数上 - 我检查日期。

谢谢!

1 个答案:

答案 0 :(得分: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);
    }
};