执行者以不同的时间间隔进行调度
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);
}
};
我尝试用 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);
}
};