关于SpringBoot定时任务的@Async注解异步执行的说明:
- 如果有多个定时任务类,且没有标注@Async注解,那么这些定时任务类里面的定时方法为同步执行,只要其中一个方法没有执行结束,另一个方法就得不到执行。
- 如果标注了@Async注解:
A.如果一个定时方法执行的时间超过了定时时间(比如定时1秒执行一次,而实际方法可能要执行20秒),那么1秒后方法即使没有执行结束,也会另起一个线程去执行该方法。
B.如果一个定时方法执行的时间小于定时时间(比如定时10秒执行一次,而实际方法只需要2秒就可以完成),那么就不会另起线程去执行该方法。
总结:
异步执行时,相当于如果定时1秒执行一次,而方法1秒内还没执行完,就另起一个线程去执行,指到把线程池里的线程数用完。
举例:
定时1秒执行1次,每次执行花费10秒,配置线程池个数4个,那么启动后,这4个线程池里的线程会被用完。因为到了1秒方法没结束,而又要1秒执行1次,那么就会拿另外的线程去执行。