譬如定时任务fixedRate是5秒,但是有时候任务执行超过5秒,接下来该任务的下一次执行怎么办?
或者cron是每分钟第5秒开始做一次任务,但是该任务超过1分钟,该任务的下一次执行怎么办?
假设在有定时线程池的情况下,会不会从线程池中取另一个线程来执行该任务的下一次执行,使得该任务的两次执行能并发进行?
其实这个问题从另一个角度来看,我们知道开启两个任务A和B可以有两种方式,一是放在同一个类里
@Component
Class Tasks{
@Scheduled(cron="5 */1 * * * ?")
public void ATask(){
...
}
@Scheduled(cron="5 */1 * * * ?")
public void BTask(){
...
}
}
一种是放在两个不同类中
@Component
Class ATask{
@Scheduled(cron="5 */1 * * * ?")
public void Task(){
...
}
}
@Component
Class BTask{
@Scheduled(cron="5 */1 * * * ?")
public void Task(){
...
}
}
若有定时线程池,那么这A和B两个任务都可以并发进行吧?但是同一个任务的两次执行在时间上发生重叠的话,可以并法执行吗?
不想重叠,分布式锁了解一下,Redis/hazelcast等,遇到了并发的,就直接跳过不执行后续的业务逻辑。