Springboot线程池配置

目录

配置文件

线程池处理流程

线程池配置类

线程池参数说明:

使用


介绍一下springboot线程池的相关配置以及相关知识:

配置文件

首先我们配置一个配置文件application-task.yml,使用springboot本身提供的参数配置

spring:
  task:
    execution:
      pool:
        core-size: 11
        max-size: 100
        keep-alive: 60s
        queue-capacity: 1000
        allow-core-thread-timeout: true

线程池处理流程

提交一个任务到线程池中,线程池的处理流程如下:
  1. 判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创 建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程。
  2. 线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如 果工作队列满了,则进入下个流程。
  3. 判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已 经满了,则交给饱和策略来处理这个任务。

线程池配置类

会默认使用我们的线程池配置

@Configuration
public class ThreadConfig {

    @Bean(name = "getDataHandleExecutor")
    ThreadPoolTaskExecutor getDataHandleExecutor(TaskExecutorBuilder builder) {
        ThreadPoolTaskExecutor taskExecutor = builder.build();
        taskExecutor.setThreadNamePrefix("interface-handle-thread-");
        return taskExecutor;
    }

}

线程池参数说明:

  1. corePoolSize:线程池的核心线程数。在没有设置 allowCoreThreadTimeOut 为 true 的情况下,核心线程会在线程池中一直存活,即使处于闲置状态。                                                 
  2. maximumPoolSize:线程池所能容纳的最大线程数。当活动线程(核心线程+非核心线程)达到这个数值后,后续任务将会根据 RejectedExecutionHandler 来进行拒绝策略处理。
  3. keepAliveTime:非核心线程 闲置时的超时时长。超过该时长,非核心线程就会被回收。若线程池通设置核心线程也允许 timeOut,即 allowCoreThreadTimeOut 为 true,则该时长同样会作用于核心线程,在超过aliveTime 时,核心线程也会被回收,AsyncTask 配置的线程池就是这样设置的。
  4. unit:keepAliveTime 时长对应的单位。
  5. workQueue:线程池中的任务队列,通过线程池的 execute() 方法提交的 Runnable 对象会存储在该队列中。
  6. ThreadFactory:线程工厂,功能很简单,就是为线程池提供创建新线程的功能。这是一个接口,可以通过自定义,做一些自定义线程名的操作。
  7. RejectedExecutionHandler:当任务无法被执行时(超过线程最大容量 maximum 并且 workQueue 已经被排满了)的处理策略,
  8. 这里有四种任务拒绝类型。

使用

1、使用@Async注解

2、 注入

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

3、使用

executor.execute(() -> {

    //业务逻辑
}

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Springboot中,配置线程池主要有两种方式:配置默认线程池和提供自定义线程池。从使用角度来看,两种配置方式并无优劣之分。如果使用默认线程池,可以直接使用@Async注解来将方法提交到默认线程池中执行。如果需要使用自定义线程池,需要在配置文件中进行相关配置,并通过@Async("自定义线程池bean对象名")的方式来使用该线程池。例如,在配置文件application-task.yml中,可以使用spring.task.execution.pool.*的参数来配置自定义线程池的属性,如core-size、max-size、keep-alive、queue-capacity等。具体的线程池处理流程如下:首先判断线程池中的核心线程是否都在执行任务,如果有空闲的核心线程或者还有未创建的核心线程,则创建一个新的工作线程来执行任务;如果所有核心线程都在执行任务,则判断工作队列是否已满,如果工作队列未满,则将新提交的任务存储在工作队列中;如果工作队列已满,则判断线程池中的线程是否都处于工作状态,如果有空闲的线程,则创建一个新的工作线程来执行任务;如果已经没有空闲的线程,则根据饱和策略来处理该任务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Springboot应用中线程池配置教程(2021版)](https://blog.csdn.net/yu102655/article/details/114846051)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Springboot线程池配置](https://blog.csdn.net/yu619251940/article/details/127862318)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值