Java线程池ThreadPoolTaskExecutor的参数

85次阅读
没有评论

Java 线程池 ThreadPoolTaskExecutor 的参数
org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 是 Spring 框架提供的一种基于 Java 线程池的异步任务执行器,它允许你灵活配置线程池以适应不同的应用场景。

一般情况我们在 SpringBoot 项目中线程池会使用默认的参数配置。如果我们需要一些特殊配置的话,还是需要了解它的具体参数代表什么意思才行的。

  1. corePoolSize: 核心线程数。这是线程池的基本大小,即使线程空闲,这部分线程也会一直存在。当有新任务到来时,如果线程池中有空闲的核心线程,则立即使用;否则,根据需求创建新线程(直到达到最大线程数)。
  2. maxPoolSize: 最大线程数。线程池能同时存在的最大线程数量。当活动线程数达到这个值后,新来的任务将会被阻塞,直到有线程空闲出来。
  3. queueCapacity: 工作队列容量。当核心线程都在忙并且线程数已经达到最大值时,新来的任务会被放入这个队列中排队等待执行。常用的队列类型有无界队列(可能导致内存溢出)、有界队列(如ArrayBlockingQueue)和同步移交队列(如SynchronousQueue)。
  4. keepAliveSeconds: 空闲线程存活时间。如果线程池中的线程数量超过了核心线程数,并且这些多余的线程空闲时间达到了keepAliveSeconds,那么这些线程会被终止,直到线程数量降到核心线程数。对核心线程无效。
  5. threadNamePrefix: 线程名称前缀。设置线程池中线程的名称前缀,方便在日志或监控中识别这些线程。
  6. rejectedExecutionHandler: 拒绝策略。当线程池和队列都满时,新提交的任务该如何处理。Spring 提供了以下几种策略:

    • AbortPolicy(默认):抛出 RejectedExecutionException 异常。
    • CallerRunsPolicy:由调用者所在的线程来执行任务。
    • DiscardPolicy:直接丢弃任务,不执行也不抛出异常。
    • DiscardOldestPolicy:丢弃队列中最旧的任务,并尝试重新提交当前任务。
    • 自定义策略:实现 RejectedExecutionHandler 接口。
  7. waitForTasksToCompleteOnShutdown: 是否等待所有任务在关闭时完成。如果设置为 true,则在调用shutdown()shutdownNow()时,会等待所有已提交的任务执行完毕;如果是false,则立即停止接受新任务并不等待现有任务完成。
  8. awaitTerminationSeconds: 关闭时等待时间。仅当 waitForTasksToCompleteOnShutdown 设为 true 时有效,表示等待多久以便所有任务完成。

通过合理配置这些参数,你可以根据应用的实际需求优化线程池性能,避免资源浪费或过度消耗。

 0
评论(没有评论)
验证码