代码随想录

17 阅读1分钟

今天突发奇想,分享偶然看到的一段spring自定义的线程池

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;

@Configuration
public class ThreadPoolConfig {

    @Bean("taskExecutor")
    public ThreadPoolExecutor taskExecutor() {
        int corePoolSize = 200;      // 核心线程数
        int maxPoolSize = 500;       // 最大线程数
        int queueCapacity = 10000;   // 队列容量
        int keepAliveTime = 60;      // 非核心线程最大空闲时间(秒)

        return new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS, new LinkedBlockingQueue<>(queueCapacity), new ThreadFactory() {
            private final AtomicInteger count = new AtomicInteger(0);

            @Override
            public Thread newThread(Runnable r) {
                return new Thread(r, "task-executor-" + count.getAndIncrement());
            }
        }, new RejectedExecutionHandler() {
            @Override
            public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
                // 自定义拒绝策略:记录日志 + 降级处理
                System.err.println("任务被拒绝执行:" + r.toString());
                // 可以添加报警、入备用队列等逻辑
            }
        });
    }
}