springboot自定义线程池
时间: 2023-09-24 14:09:45 浏览: 104
在Spring Boot中,我们可以使用@Async注解来异步执行方法。但是默认情况下,Spring Boot使用的是SimpleAsyncTaskExecutor,它是一个单线程的线程池,不能满足高并发场景的需求。因此,我们需要自定义线程池来满足不同的需求。
下面是自定义线程池的步骤:
1. 创建自定义线程池的配置类
```java
@Configuration
public class ThreadPoolConfig {
@Bean("myThreadPool")
public Executor myThreadPool(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 线程池核心线程数
executor.setCorePoolSize(10);
// 线程池最大线程数
executor.setMaxPoolSize(20);
// 队列容量
executor.setQueueCapacity(100);
// 线程池维护线程所允许的空闲时间
executor.setKeepAliveSeconds(60);
// 线程池的前缀名
executor.setThreadNamePrefix("myThreadPool-");
// 拒绝策略,当线程池满了并且队列也满了,新任务会被拒绝
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 初始化线程池
executor.initialize();
return executor;
}
}
```
2. 在需要异步执行的方法上添加@Async注解,并指定使用的线程池
```java
@Service
public class MyService {
@Async("myThreadPool")
public void asyncMethod(){
// 异步执行的方法体
}
}
```
3. 测试异步执行方法的效果
```java
@RestController
public class MyController {
@Autowired
private MyService myService;
@GetMapping("/async")
public String async(){
myService.asyncMethod();
return "异步执行中...";
}
}
```
通过以上步骤,我们就可以自定义线程池来异步执行方法了。
阅读全文