没错-
默认情况下,调度程序使用大小为1的线程池,因此将按顺序处理每个任务。您可以通过将
TaskSchedulerbean
配置为所需的池大小来实现。考虑以下示例:
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.context.annotation.Bean;import org.springframework.scheduling.TaskScheduler;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;import java.util.Date;@SpringBootApplication@EnableSchedulingpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public TaskScheduler taskScheduler() { final ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); scheduler.setPoolSize(10); return scheduler; } @Scheduled(fixedDelay = 2 * 1000L, initialDelay = 3 * 1000L) public void scheduled1() throws InterruptedException { System.out.println(new Date() + " " + Thread.currentThread().getName() + ": scheduled1"); Thread.sleep(1000); } @Scheduled(fixedDelay = 3 * 1000L, initialDelay = 3 * 1000L) public void scheduled2() throws InterruptedException { System.out.println(new Date() + " " + Thread.currentThread().getName() + ": scheduled2"); Thread.sleep(1000); }}它将在单独的线程中运行每个计划的任务,例如:
Tue Jul 18 20:21:50 CEST 2017 taskScheduler-1: scheduled2Tue Jul 18 20:21:50 CEST 2017 taskScheduler-2: scheduled1Tue Jul 18 20:21:53 CEST 2017 taskScheduler-1: scheduled1Tue Jul 18 20:21:54 CEST 2017 taskScheduler-3: scheduled2Tue Jul 18 20:21:56 CEST 2017 taskScheduler-2: scheduled1Tue Jul 18 20:21:58 CEST 2017 taskScheduler-4: scheduled2Tue Jul 18 20:21:59 CEST 2017 taskScheduler-1: scheduled1



