当前位置: 首页 > article >正文

springboot配置线程池

直接上代码

配置

定义一个配置类

创建一个springboot能扫描到的地方创建一个线程池配置类
在这里插入图片描述

配置信息

package com.example.demonew.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;

@Configuration //表明是配置类,springboot会来扫描
public class ThreadPoolConfig {

    @Bean(name="taskExecutor") //配置bean对象交给springboot容器给我们管理,这时候就相当于创建了一个单例线程池名字为taskExecutor
    public Executor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(100);
        executor.initialize();
        return executor;
    }

    @Bean("poolExecutor") //配置第二个线程池
    public Executor poolExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        //设置线程池参数信息
        taskExecutor.setCorePoolSize(10);
        taskExecutor.setMaxPoolSize(50);
        taskExecutor.setQueueCapacity(200);
        taskExecutor.setKeepAliveSeconds(60);
        taskExecutor.setThreadNamePrefix("myExecutor2--");
        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        taskExecutor.setAwaitTerminationSeconds(60);
        //修改拒绝策略为使用当前线程执行
        taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        //初始化线程池
        taskExecutor.initialize();
        return taskExecutor;
    }
}

实现

package com.example.demonew.service;

import com.example.demonew.config.ThreadPoolConfig;
import jakarta.annotation.Resource;

import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.stereotype.Service;

import java.util.concurrent.Executors;


@Service
public class TestServiceImpl  implements TestService{

    @Resource(name = "taskExecutor") //指定注入的bean 可以切换成poolExecutor
    private ThreadPoolTaskExecutor executor;

    @Override
    public String test() {
        ThreadPoolTaskExecutor taskExecutor = executor;

        // 获取线程池信息
        int activeCount = taskExecutor.getActiveCount();
        int corePoolSize = taskExecutor.getCorePoolSize();
        int poolSize = taskExecutor.getPoolSize();


        taskExecutor.execute(()->{
                System.out.printf(activeCount+"--"+corePoolSize);

        });

        return null;
    }
}

结果

@Resource(name = "taskExecutor") //指定注入的bean 可以切换成poolExecutor
private ThreadPoolTaskExecutor executor;

在这里插入图片描述

@Resource(name = "poolExecutor")
private ThreadPoolTaskExecutor executor;

在这里插入图片描述
切换成功


http://www.kler.cn/a/469909.html

相关文章:

  • [微服务]redis主从集群搭建与优化
  • 使用 Python结合ffmpeg 实现单线程和多线程推流
  • 【连续学习之LwM算法】2019年CVPR顶会论文:Learning without memorizing
  • 数据挖掘——数据预处理
  • (leetcode算法题)面试题 17.19. 消失的两个数字
  • 基于Centos 7系统的安全加固方案
  • 今日总结 2025-01-06
  • 软件工程大复习之(四)——面向对象与UML
  • win32汇编环境,在窗口程序中画五边形与六边形
  • Unity3D PBR光照计算公式推导详解
  • 土建施工员考试题库及答案
  • 社交新零售下开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序的促单策略研究
  • MR20强抗干扰一体式IO模块的革新力量
  • KACL:Knowledge-Adaptive Contrastive Learning for Recommendation
  • C++ 原子变量
  • Bash语言的函数实现
  • Spring Boot 项目离线环境手动构建指南
  • Android客制化------7.0设置壁纸存在的一些问题
  • 神经网络第一课
  • HTML语言的数据库交互
  • 【JavaWeb学习Day09】
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(7)对称问题预备水杯案例分析
  • Oracle Dataguard 需要配置的参数详解
  • amis系列开发
  • 位向量系统函数
  • [CTF/网络安全] 攻防世界 ics-06 解题详析