java 自定义线程池配置类
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author yuyz
* @version 1.0
* @create 2022-02-19
* @description 自定义线程池配置类
*/
@Configuration
public class ThreadPoolConfig {
@Bean
public ThreadPoolExecutor threadPoolExecutor(){
/**
* 核心线程数
* 拥有最多线程数
* 表
* 存活时间单位示空闲线程的存活时间
* 用于缓存任务的阻塞队列
* 省略:
* threadFactory:指定创建线程的工厂
* handler:表示当workQueue已满,且池中的线程数达到maximumPoolSize时,线程池拒绝添加新任务时采取的策略。
*/
return new ThreadPoolExecutor(50,500,30, TimeUnit.SECONDS,new ArrayBlockingQueue<>(10000));
/**
* 线程初始化流程(以及参数的作用):
* 1.当项目初始化完成的时候,初始化自定义线程池配置类
* 2.当前的核心线程数是50个,最大线程数是500个
* 核心线程50个是不会被回收的线程
* 非核心线程450个会被回收
* 3.第三和第四参数是定义被回收线程的时间
* 4.第五参数定义任务阻塞队列1万个
* 线程池的工作机制:
* 1.初始化线程池时,当前核心线程和非核心线程的个数为0,当有一个任务需要线程处理,优先创建核心线程去处理
* 2.核心线程不会被回收,当需要处理的任务超过50个核心线程时,核心线程没有空闲,那么任务会放到消息队列中
* 3.此时再有任务需要处理,当前核心线程没有空闲且队列中存有1万个等待处理的任务时,线程池创建非核心线程去处理请求处理的任务
* 4.当核心线程满了,队列满了,非核心线程满了,触发拒绝策略
*
* 拒绝策略(4种):
* AbortPolicy 默认拒绝策略,抛出异常
* CallerRunsPolicy 谁调用,返回给谁执行
* DiscardPolicy 不抛出异常,不执行,啥也不干
* DiscardOldestPolicy 从队列中取出一个等待时间最长的任务进行处理
*/
}
}