org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor
是 Spring 框架提供的一种基于 Java 线程池的异步任务执行器,它允许你灵活配置线程池以适应不同的应用场景。
一般情况我们在 SpringBoot 项目中线程池会使用默认的参数配置。如果我们需要一些特殊配置的话,还是需要了解它的具体参数代表什么意思才行的。
- corePoolSize: 核心线程数。这是线程池的基本大小,即使线程空闲,这部分线程也会一直存在。当有新任务到来时,如果线程池中有空闲的核心线程,则立即使用;否则,根据需求创建新线程(直到达到最大线程数)。
- maxPoolSize: 最大线程数。线程池能同时存在的最大线程数量。当活动线程数达到这个值后,新来的任务将会被阻塞,直到有线程空闲出来。
- queueCapacity: 工作队列容量。当核心线程都在忙并且线程数已经达到最大值时,新来的任务会被放入这个队列中排队等待执行。常用的队列类型有无界队列(可能导致内存溢出)、有界队列(如
ArrayBlockingQueue
)和同步移交队列(如SynchronousQueue
)。 - keepAliveSeconds: 空闲线程存活时间。如果线程池中的线程数量超过了核心线程数,并且这些多余的线程空闲时间达到了
keepAliveSeconds
,那么这些线程会被终止,直到线程数量降到核心线程数。对核心线程无效。 - threadNamePrefix: 线程名称前缀。设置线程池中线程的名称前缀,方便在日志或监控中识别这些线程。
-
rejectedExecutionHandler: 拒绝策略。当线程池和队列都满时,新提交的任务该如何处理。Spring 提供了以下几种策略:
AbortPolicy
(默认):抛出RejectedExecutionException
异常。CallerRunsPolicy
:由调用者所在的线程来执行任务。DiscardPolicy
:直接丢弃任务,不执行也不抛出异常。DiscardOldestPolicy
:丢弃队列中最旧的任务,并尝试重新提交当前任务。- 自定义策略:实现
RejectedExecutionHandler
接口。
- waitForTasksToCompleteOnShutdown: 是否等待所有任务在关闭时完成。如果设置为
true
,则在调用shutdown()
或shutdownNow()
时,会等待所有已提交的任务执行完毕;如果是false
,则立即停止接受新任务并不等待现有任务完成。 - awaitTerminationSeconds: 关闭时等待时间。仅当
waitForTasksToCompleteOnShutdown
设为true
时有效,表示等待多久以便所有任务完成。
通过合理配置这些参数,你可以根据应用的实际需求优化线程池性能,避免资源浪费或过度消耗。
发表至: 代码脚本
2024-06-20