1)@Scheduled 單個方法內部單線程執行,不會存在前一個定時任務沒完成,開啟后一個定時任務的情況
例如:方法a,a的第一遍執行中途卡主了,即使a的定時時間到了a也不會再次執行,串行
2)@Scheduled
2.1)默認所有的@Scheduled方法由單線程調度,沒有同時執行的任務
例如:方法a和b,a的執行卡住了,即使時間到了b也不會執行,也是串行
2.2)配置多線程任務調度
package com.gd.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import java.util.concurrent.Executors;
/**
* 多線程執行定時任務
*/
//@Configuration
//所有的定時任務都放在一個線程池中,定時任務啟動時使用不同都線程。
public class ScheduleConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//設定一個長度10的定時任務線程池
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10));
}
}