简介

SpringBoot线程池配置心得。

1、核心配置参数

task:
  pool:
    corePoolSize: 4
    maxPoolSize: 20
    keepAliveSeconds: 300
    #queueCapacity: 8

1、 queueCapacity 队列长度,参考源码可以发现,当我们限制队列长度的时候,很有可能会由于任务的疯狂提交导致后面的任务被全部拒绝处理。因此,如果单个任务耗费时间比较长,那么推荐不要去限制queueCapacity的长度,而让其保持默认值

    private int corePoolSize = 1;
    private int maxPoolSize = 2147483647;
    private int keepAliveSeconds = 60;
    private int queueCapacity = 2147483647; //该默认值
    private boolean allowCoreThreadTimeOut = false;

以上是相关配置的默认值。这样,可以一口气加载我们提交的任务的上下文信息。

2、maxPoolSizecorePoolSize:可以理解为闲时的线程池维护的核心线程数量corePoolSize,当然,设置一些其他参数例如闲时时间参数时另算。再有maxPoolSize是当当前线程超过核心线程的时候,还可以继续创建的线程数量,由于任务和对应线程做了一一映射,也可以理解为系统当前处理的任务的最大数量,此时需要注意的是,不要设置的过大,根据电脑的性能以及任务的消耗进行对应设置,设置的过小那么不能最大程度利用机器性能,设置的过大则会导致系统卡死或者崩溃。

3、keepAliveSeconds: 程池维护线程所允许的空闲时间,同理,参考源码,其值默认为60s。

04-12 15:40