配置java常用线程池

@Configuration
public class ThreadPoolConfig {
    /**
     * 获取系统处理器个数,作为线程池数量
     */
    private final int CPU_NUM = Runtime.getRuntime().availableProcessors();

    /**
     * 使用Guava的ThreadFactoryBuilder线程工厂
     */
    private final ThreadFactory THREAD_FACTORY = new ThreadFactoryBuilder()
    .setNameFormat("demo-pool-%d").build();

    /** 核心线程池大小 */
    private final int CORE_POOL_SIZE = 50;

    /** 最大可创建的线程数 */
    private final int MAX_POOL_SIZE = 200;

    /** 队列最大长度 */
    private final int QUEUE_CAPACITY = 1000;

    /** 线程池维护线程所允许的空闲时间 */
    private final int KEEP_ALIVE_SECONDS = 300;

    @Bean(name = "threadPoolTaskExecutor")
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setMaxPoolSize(MAX_POOL_SIZE);
        executor.setCorePoolSize(CORE_POOL_SIZE);
        executor.setQueueCapacity(QUEUE_CAPACITY);
        executor.setKeepAliveSeconds(KEEP_ALIVE_SECONDS);
        // 线程池对拒绝任务(无线程可用)的处理策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }

    /**
     * 初始化线程池
     */
    @Bean(name = "threadPoolExecutor")
    public ExecutorService threadPoolExecutor() {
        return new ThreadPoolExecutor(
                //设置核心线程数量
                CPU_NUM,
                //设置最大线程数量
                CPU_NUM * 10,
                //设置过期时间20秒
                20,
                TimeUnit.SECONDS,
                //设置列队 最大长度1024
                new LinkedBlockingQueue<Runnable>(1024),
                //设置线程工厂
                THREAD_FACTORY,
                //设置拒绝策略:丢弃任务并抛出RejectedExecutionException异常
                new ThreadPoolExecutor.AbortPolicy());
    }

    /**
     * 执行周期性或定时任务
     */
    @Bean(name = "scheduledExecutorService")
    protected ScheduledExecutorService scheduledExecutorService() {
        return new ScheduledThreadPoolExecutor(CORE_POOL_SIZE,
                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build(),
                new ThreadPoolExecutor.CallerRunsPolicy()) {
            @Override
            protected void afterExecute(Runnable r, Throwable t) {
                super.afterExecute(r, t);
                Threads.printException(r, t);
            }
        };
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科杰智能制造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值