SpringBoot项目中使用线程池
在SpringBoot环境使用线程池并可配置
1.Config配置类
package com.atguigu.gulimall.product.config;
import org.apache.tomcat.util.threads.ThreadPoolExecutor;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
/**
*
* 线程池配置
* @author Hacah
* @date 2022/12/2 22:01
*/
@EnableConfigurationProperties(value = ThreadPoolConfigurationProperties.class)
@Configuration
public class ThreadPoolConfig {
@Bean
public ThreadPoolExecutor threadPool(ThreadPoolConfigurationProperties configurationProperties) {
/**
* 线程池配置的七大参数
*/
return new ThreadPoolExecutor(configurationProperties.getCorePoolSize(), configurationProperties.getMaxPoolSize(),
configurationProperties.getKeepAliveTime(), TimeUnit.MILLISECONDS, new LinkedBlockingDeque<>(100000),
Executors.defaultThreadFactory(), new java.util.concurrent.ThreadPoolExecutor.AbortPolicy());
}
}
corePoolSize
代表核心的线程大小。也就是正常保持的线程数,不会删除,除非设置了 allowCoreThreadTimeOut。
maximumPoolSize
线程池允许最大线程数(线程数量最多到 2 的 29 次方 -1)
keepAliveTime
超过核心线程部分的线程,空闲时最大的存活时间。最终线程池维持在 corePoolSize 大小
unit
上一个参数的单位
workQueue
用来存储执行的任务,可使用LinkedBlockingQueue。
threadFactory
线程创建的工厂。控制线程创建的规则参数线程名、组、优先级等,可以使用DefaultThreadFactory
handler
超过最大线程数后,线程满了。对线程的处理策略。可使用AbortPolicy,拒接任务并抛出异常。
2.属性配置类
package com.atguigu.gulimall.product.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* 线程池配置
* @author Hacah
* @date 2022/12/2 22:03
*/
@Data
@ConfigurationProperties(prefix = "hacah.thread")
public class ThreadPoolConfigurationProperties {
/**
* 核心大小
*/
private Integer corePoolSize;
/**
* 最大量
*/
private Integer maxPoolSize;
/**
* 时间,毫秒
*/
private Long keepAliveTime;
}
之后就能在配置文件配置
3.配置文件
hacah:
thread:
core-pool-size: 10
max-pool-size: 200
keepAliveTime: 10000
4.使用
Spring依赖注入方式