https://spring.io/guides/gs/scheduling-tasks/html
官方文档详细介绍了@Scheduled中fixedRate,fixedDelay,cron的用法java
fixedRate表明调用频率,单位为ms,若是调用频率设为5000ms,那么当你第一次调用占用2秒时等待3秒会第二次调用,当你第二次调用占用5秒时结束会立马第三次调用。spring
fixedDelay表明间隔时间,单位为ms,即每次调用完成时间和下次调用都相隔5000ms。api
cron表达式,看官网文档ide
设置延迟5秒时,执行时间为3秒ui
@Scheduled(fixedDelay=5000) public void execute() throws InterruptedException { System.out.println("调用时间"+CommonTool.getNowDateStr()); Thread.sleep(3000); }
发现两次开始调用时间为8秒恰好为执行时间+等待时间spa
设置延迟5秒,而且方法调用时间为6秒时线程
@Scheduled(fixedDelay=5000) public void execute() throws InterruptedException { System.out.println("调用时间"+CommonTool.getNowDateStr()); Thread.sleep(6000); }
发现间隙为11,也为执行时间+等待时间code
设置延迟5秒时,执行时间为3秒htm
发现间隔时间即为5秒
设置延迟5秒,而且方法调用时间为6秒时
发现调用间隔为6秒,因而可知是单线程运行。
@Scheduled(cron="* * * * * *")
Thread.sleep(24*3600*1000);
schedule是单线程的,阻塞的,因此千万不要长时间睡眠,会影响队列里其余schedule的执行。若是想多个schedule同时进行能够在xm里面配置线程池