`
darrenzhu
  • 浏览: 804597 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring线程池ThreadPoolTaskExecutor

阅读更多
<!-- spring thread pool executor -->           
    <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <!-- 线程池维护线程的最少数量 -->
        <property name="corePoolSize" value="5" />
        <!-- 允许的空闲时间 -->
        <property name="keepAliveSeconds" value="200" />
        <!-- 线程池维护线程的最大数量 -->
        <property name="maxPoolSize" value="10" />
        <!-- 缓存队列 -->
        <property name="queueCapacity" value="20" />
        <!-- 对拒绝task的处理策略 -->
        <property name="rejectedExecutionHandler">
            <bean class="java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy" />
        </property>
    </bean>



属性字段说明

corePoolSize:线程池维护线程的最少数量

keepAliveSeconds:允许的空闲时间

maxPoolSize:线程池维护线程的最大数量

queueCapacity:缓存队列

rejectedExecutionHandler:对拒绝task的处理策略

2. execute(Runable)方法执行过程
如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。

如果此时线程池中的数量等于 corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maxPoolSize,建新的线程来处理被添加的任务。

如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maxPoolSize,那么通过handler所指定的策略来处理此任务。也就是:处理任务的优先级为:核心线程corePoolSize、任务队列workQueue、最大线程 maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。

当线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

原文链接:
https://www.cnblogs.com/redcool/p/6426173.html

案例:



@Configuration
public class SkuImportThreadConfiguration {
    @Bean
    public ThreadPoolTaskExecutor rpsSkuBasicFailedTaskExecutor() {
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(10);
        threadPoolTaskExecutor.setMaxPoolSize(20);
        threadPoolTaskExecutor.setQueueCapacity(200);
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        return threadPoolTaskExecutor;
    }
}



//重要,优雅关闭
threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);


分享到:
评论

相关推荐

    Spring线程池ThreadPoolTaskExecutor配置详情

    Spring线程池ThreadPoolTaskExecutor配置详情 Spring线程池ThreadPoolTaskExecutor是Spring Framework提供的一种线程池实现,用于管理和执行异步任务。本文将详细介绍ThreadPoolTaskExecutor的配置详情,并提供一...

    spring线程池(同步、异步).docx

    以下是关于Spring线程池(同步、异步)的详细解析: 一、Spring异步线程池类图 Spring提供了一系列的`TaskExecutor`实现,它们根据不同的需求和场景有不同的特性和行为。这些实现包括但不限于: 1. `...

    springmvc+spring线程池处理http并发请求数据同步控制问题

    在这个主题中,我们将深入探讨如何利用Spring MVC与Spring线程池来有效地管理并发请求,并解决数据同步控制问题。 一、Spring MVC与并发处理 1. Spring MVC通过DispatcherServlet接收HTTP请求,然后根据映射规则将...

    spring 线程池

    `标签`中的“源码”提示我们可以深入研究Spring线程池的实现,例如分析`ThreadPoolTaskExecutor`的源代码,了解其内部如何处理任务提交、线程管理以及异常处理等。而“工具”则可能是指Spring提供的一些工具类或辅助...

    spring 线程池实例

    配置Spring线程池主要涉及以下几个核心属性: 1. `corePoolSize`:核心线程数,即线程池维护线程的最少数量。即使在空闲时,线程池也会保留这些线程,不进行销毁。 2. `maximumPoolSize`:最大线程数,线程池能容纳...

    Spring基于线程池的定时任务线挰异常实践

    线程池的实现可以通过实现这个接口来完成,Spring提供了ThreadPoolTaskExecutor作为线程池的实现。通过配置ThreadPoolTaskExecutor,我们可以定制线程池的参数,如核心线程数、最大线程数、线程存活时间、工作队列...

    spring线程池ThreadPoolExecutor配置以及FutureTask的使用

    在Java的多线程编程中,Spring框架提供了一种便捷的方式来管理和配置线程池,这就是`ThreadPoolTaskExecutor`。这个类是Spring对Java内置的`java.util.concurrent.ThreadPoolExecutor`的封装,允许开发者在Spring...

    Spring线程池demo

    本文将详细探讨在Spring框架中如何配置和使用线程池,并通过一个简单的示例——"Spring线程池demo"来展示其实现过程。 首先,我们需要了解线程池的基本原理。线程池通过预先创建一定数量的线程,当有任务需要执行时...

    JDK线程池和Spring线程池的使用实例解析

    JDK线程池和Spring线程池的使用实例解析 JDK线程池和Spring线程池是两种常用的线程池实现,它们都提供了线程池的功能,但它们在使用和配置上有所不同。下面我们将详细介绍JDK线程池和Spring线程池的使用实例解析。 ...

    Spring3.2.6定时任务+线程池.docx

    ### Spring3.2.6定时任务...#### 二、Spring线程池配置 Spring框架提供了一个强大的任务调度模块,其中包含了对线程池的支持。下面通过一个具体的示例来展示如何在Spring3.2.6中配置线程池: ```xml &lt;!-- 线程池 --&gt; ...

    Spring线程池ThreadPoolExecutor配置并且得到任务执行的结果

    Spring线程池ThreadPoolExecutor配置并且得到任务执行的结果 在Java中,线程池是一种非常重要的技术,能够帮助我们更好地管理线程资源,提高系统的性能和可扩展性。其中,ThreadPoolExecutor是Java中的一种线程池...

    Spring Boot使用Spring的异步线程池的实现

    Spring Boot 使用 Spring 的异步线程池的实现 在软件开发中,异步线程池是一种非常重要的技术,能够帮助我们更好地处理系统性能和大用户量请求之间的矛盾。Spring Boot 提供了异步线程池的实现,可以帮助我们更好地...

    Spring Boot 线程池的创建、@Async 配置步骤及注意事项.docx

    在Spring Boot应用中,使用线程池和异步处理是提高系统并发性能和响应速度的重要手段。`@Async`注解是Spring提供的一个特性,用于标记方法为异步执行,这样可以避免主线程等待耗时的操作,提高系统效率。本文将详细...

    HttpClient+ Spring实现多线程

    &lt;bean id="threadPoolTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"&gt; ``` 然后,可以在需要发起HTTP请求的业务逻辑中注入这个线程池,异步执行任务: ```...

    浅谈Spring @Async异步线程池用法总结

    Spring提供了多种异步线程池的接口类,包括TaskExecutor、SimpleAsyncTaskExecutor、SyncTaskExecutor、ConcurrentTaskExecutor、SimpleThreadPoolTaskExecutor、ThreadPoolTaskExecutor等。其中,...

    Spring Boot 自定义异步线程池的两种方式Demo

    在Spring Boot应用中,我们经常需要处理大量的并发请求,这时自定义异步线程池就显得尤为重要。异步处理能够提高应用的响应速度,避免主线程阻塞,从而提升系统性能。本文将详细介绍两种在Spring Boot中实现自定义...

    Spring提供的线程池支持[借鉴].pdf

    Spring框架在2.0版本之后引入了对线程池的支持,主要是受到了Java SE 5.0中`java.util.concurrent.Executor`接口的影响。`TaskExecutor`接口是Spring为各种线程池服务提供的一种抽象,它的目的是统一客户端的视图,...

    Spring Boot利用@Async如何实现异步调用:自定义线程池

    在Spring Boot中,可以使用ThreadPoolTaskExecutor类来创建一个自定义的线程池。例如: ```java @Configuration public class TaskPoolConfig { @Bean("taskExecutor") public Executor taskExecutor() { ...

    spring 的详细使用

    Spring 提供了 ThreadPoolTaskExecutor 和 ThreadPoolTaskScheduler,它们是基于 Java 的 ExecutorService 和 ScheduledExecutorService 的封装,可以方便地管理和配置线程池,提高并发性能。 **SpringMVC** ...

    基于Spring中的线程池和定时任务功能解析

    基于Spring中的线程池和定时任务功能解析 Spring框架提供了线程池和定时任务执行的抽象接口:TaskExecutor和TaskScheduler来支持异步执行任务和定时执行任务功能。TaskExecutor是一个抽象接口,定义了execute方法,...

Global site tag (gtag.js) - Google Analytics