springboot整合线程池

2022-01-28 14:44:11 浏览数 (1)

最近看直接起个线程的方法不是太好,顺便整理下线程池的配置,直接上代码。

配置线程池

代码语言:javascript复制
@Configuration
public class ThreadPoolConfig {
    // 核心线程池大小
    private int corePoolSize = 50;

    // 最大可创建的线程数
    private int maxPoolSize = 200;

    // 队列最大长度
    private int queueCapacity = 1000;

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

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

创建TestThreadController

代码语言:javascript复制
    @GetMapping("test2")
    public String test2(){
        testService.tset2();
        return "test2";
    }

创建TestService

代码语言:javascript复制
  @Async("myThreadPoolTaskExecutor")
    public void tset2(){
        try {
            log.info("test执行");
            System.out.println("当前运行的线程名称:"   Thread.currentThread().getName());
            Thread.sleep(3000);
            log.info("test执行");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

启动类加注解

代码语言:javascript复制
@EnableAsync
@SpringBootApplication
public class TestApplication {

    /**
     * 主方法
     * @param args
     */
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

测试

测试例测试例

腾云先锋(TDP,Tencent Cloud Developer Pioneer)是腾讯云GTS官方组建并运营的技术开发者群体。这里有最专业的开发者&客户,能与产品人员亲密接触,专有的问题&需求反馈渠道,有一群志同道合的兄弟姐妹。来加入属于我们开发者的社群吧 。

0 人点赞