springboot 线程池
时间: 2023-07-05 09:36:36 浏览: 168
springboot中@Async默认线程池导致OOM问题
5星 · 资源好评率100%
Spring Boot提供了一种简便的方式来创建和配置线程池。可以通过在应用程序.properties 或.yml文件中设置以下属性来配置线程池:
1. 核心线程数:spring.task.execution.pool.core-size
2. 最大线程数:spring.task.execution.pool.max-size
3. 队列容量:spring.task.execution.pool.queue-capacity
下面是一个示例配置:
```
spring.task.execution.pool.core-size=5
spring.task.execution.pool.max-size=10
spring.task.execution.pool.queue-capacity=1000
```
在代码中,可以使用`@Async`注解将方法标记为异步执行。默认情况下,Spring Boot使用SimpleAsyncTaskExecutor来执行异步方法。如果需要使用自定义线程池,可以创建一个ThreadPoolTaskExecutor bean,并将它注入到异步执行方法的实例中。例如:
```
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Bean(name = "taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(1000);
executor.setThreadNamePrefix("MyAsyncThread-");
executor.initialize();
return executor;
}
@Override
public Executor getAsyncExecutor() {
return taskExecutor();
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}
```
然后,在需要异步执行的方法上使用`@Async("taskExecutor")`注解来指定使用自定义的线程池。例如:
```
@Service
public class MyService {
@Async("taskExecutor")
public void myAsyncMethod() {
// 异步执行的代码
}
}
```
阅读全文