今天突发奇想,分享偶然看到的一段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());
// 可以添加报警、入备用队列等逻辑
}
});
}
}