目录

配置文件

线程池处理流程

线程池配置类

线程池参数说明:

使用


介绍一下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(() -> {

    //业务逻辑
}

Logo

欢迎加入西安开发者社区!我们致力于为西安地区的开发者提供学习、合作和成长的机会。参与我们的活动,与专家分享最新技术趋势,解决挑战,探索创新。加入我们,共同打造技术社区!

更多推荐