Java 自定义线程池配置类


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 从队列中取出一个等待时间最长的任务进行处理
         */

    }
}