【问题标题】:How to run method/function after every 2 minutes upto 10 minutes in java?如何在java中每2分钟到10分钟后运行方法/函数?
【发布时间】:2021-05-09 15:22:42
【问题描述】:
我尝试在每 2 分钟到 10 分钟后使用线程运行方法/函数,但它占用了大量资源,这会降低服务器速度。
我想实现这样的目标
0-10 分钟= 每 2 分钟调用一次函数
10 分钟后
10-30 分钟 = 每 5 分钟调用一次函数
之后
每 10 分钟最多 5 小时后调用函数
【问题讨论】:
标签:
java
multithreading
spring-boot
timer
【解决方案1】:
你没有指定你想要的调度系统,
但如果你使用石英,那么以下两者的组合就可以解决问题:
这将改变作业的 cron 触发器:
reschedule a job using quartz
在这里,您将计算调用次数,
因为这还不够,您还将添加一个当前状态的枚举,以了解您处于这三个状态的哪一部分:
count number of invocation using atomic integer
@Data
public class triggerHourHelper {
private TaskPart taskPart;
private AtomicInteger counter;
}
public enum TaskPart {
ONE,TWO,THREE
}
您所要做的就是在工作结束时检查 numberOfInvocation => 是否等于 X(数字表示我们应该移至下一部分),
简单示例(您可以使用 switch case 或其他更多 java 8+ 方法来实现此目的):
private boolean shouldReschedule() {
if(ONE.equals(taskPart)){
return numberOfInvocation == 5;
}
//else if...
}