Spring Boot 中自定义线程池的正确使用姿势:定义、注入与最佳实践

文章目录

  • 线程池
    • [1. 定义线程池](#1. 定义线程池)
    • [2. 注入线程池](#2. 注入线程池)

线程池

1. 定义线程池

  • 定义线程池工具类value起别名
java 复制代码
@Component
public class ThreadUtil {

    @Bean("executorService")
    public ExecutorService executorService() {
        return new ThreadPoolExecutor(
                10,                    // 核心线程数
                30,                    // 最大线程数
                60, TimeUnit.SECONDS,  // 空闲线程存活时间
                new ArrayBlockingQueue<>(500), // 有界队列
                new ThreadFactory() {  // 自定义线程名
                    private final AtomicInteger index = new AtomicInteger(1);
                    @Override
                    public Thread newThread(Runnable r) {
                        return new Thread(r, "task-pool-" + index.getAndIncrement());
                    }
                },
                new ThreadPoolExecutor.CallerRunsPolicy() // 拒绝策略
        );
    }
}

2. 注入线程池

  • 注入线程池,要用@Qualifier来与value的值对应
  • @Resource()
java 复制代码
@Service
public class TaskService {

    @Resource(name = "executorService")
    private ExecutorService executorService;

    public void doTask() {
        executorService.execute(() -> {
            System.out.println("执行任务 → " + Thread.currentThread().getName());
        });
    }
}
  • @AutoWrite()
java 复制代码
@Service
public class TaskService {

    @Autowired
    @Qualifier("executorService")
    private ExecutorService executorService;

}
  • 构造器注入
java 复制代码
@Service
public class TaskService {

    private final ExecutorService executorService;

    public TaskService(@Qualifier("executorService") ExecutorService executorService) {
        this.executorService = executorService;
    }
}
相关推荐
用户605723748730815 分钟前
AI 编码助手的规范驱动开发 - OpenSpec 初探
前端·后端·程序员
哈密瓜的眉毛美21 分钟前
零基础学Java|第二篇:Java 核心机制与第一个程序:从 JVM 到 Hello World
后端
码路飞35 分钟前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
用户83071968408236 分钟前
RabbitMQ vs RocketMQ 事务大对决:一个在“裸奔”,一个在“开挂”?
后端·rabbitmq·rocketmq
初次攀爬者37 分钟前
RocketMQ 集群介绍
后端·消息队列·rocketmq
初次攀爬者38 分钟前
RocketMQ在Spring Boot上的基础使用
java·spring boot·rocketmq
Leo89942 分钟前
go 从零单排 之 一小时通关
后端
花花无缺43 分钟前
搞懂@Autowired 与@Resuorce
java·spring boot·后端
CodeMonkey43 分钟前
记一次傻逼一样的 OOM 异常
后端
初次攀爬者1 小时前
RocketMQ 基础学习
后端·消息队列·rocketmq