spring @schedule如何并发执行多个不同任务
时间: 2024-05-07 17:15:48 浏览: 76
Spring @Scheduled注解默认是单线程执行的,如果想要实现多个不同任务并发执行,可以采用以下两种方式:
1. 使用线程池
通过在配置中添加线程池,可以实现多个任务并发执行。具体实现方式如下:
```
@Configuration
@EnableScheduling
public class ScheduleConfig {
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(200);
executor.setThreadNamePrefix("taskExecutor-");
executor.initialize();
return executor;
}
}
```
在任务方法上加上@Async注解,并指定线程池即可:
```
@Service
public class MyService {
@Async("taskExecutor")
@Scheduled(fixedDelay = 1000)
public void task1() {
// 执行任务1
}
@Async("taskExecutor")
@Scheduled(fixedDelay = 2000)
public void task2() {
// 执行任务2
}
}
```
2. 使用@Scheduled注解的fixedRate属性
@Scheduled注解的fixedRate属性可以实现固定频率执行任务,如果设置的频率足够小,就可以实现多个任务并发执行。例如:
```
@Service
public class MyService {
@Scheduled(fixedRate = 1000)
public void task1() {
// 执行任务1
}
@Scheduled(fixedRate = 2000)
public void task2() {
// 执行任务2
}
}
```
以上两种方式都可以实现多个不同任务并发执行,具体选择哪种方式取决于实际情况。如果任务之间没有依赖关系,可以使用第二种方式;如果任务之间有依赖关系,需要控制并发度,可以使用第一种方式。
阅读全文