Spring Boot 配置和使用多线程池的实现

 更新时间:2018年06月08日 09:20:56   作者:阿懒土灵  
这篇文章主要介绍了Spring Boot 配置和使用多线程池的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

某些情况下,我们需要在项目中对多种任务分配不同的线程池进行执行。从而通过监控不同的线程池来控制不同的任务。为了达到这个目的,需要在项目中配置多线程池。

spring boot 提供了简单高效的线程池配置和使用方案。

配置

首先是配置线程池的bean交给spring 管理:

@Configuration

public class TaskExecutePool {

 @Bean(name ="threadPoolA")

public ThreadPoolTaskExecutormyTaskAsyncPool() {

ThreadPoolTaskExecutor executor =new ThreadPoolTaskExecutor();
  executor.setCorePoolSize(4);

  executor.setMaxPoolSize(8);

  executor.setQueueCapacity(100);

  executor.setKeepAliveSeconds(60);

  executor.setThreadNamePrefix("Pool-A");

  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

  executor.initialize();

  return executor;

 }

@Bean(name ="ThreadPoolB")

public ThreadPoolTaskExecutorAsyncPoolB() {

ThreadPoolTaskExecutor executor =new ThreadPoolTaskExecutor();

  executor.setCorePoolSize(2);

  executor.setMaxPoolSize(4);

  executor.setQueueCapacity(8);

  executor.setKeepAliveSeconds(60);

  executor.setThreadNamePrefix("Pool-B");
  //当任务数量超过MaxPoolSize和QueueCapacity时使用的策略,该策略是又调用任务的线程执行
  executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());

  executor.initialize();

  return executor;

 }

}

使用

使用线程只需要在执行方法上加上注释,同时该方法的类必须被定义为bean,交由spring管理。

可以在类上使用注解@Component、@Service等

@Async(value="ThreadPoolA")
public void taskA(){
 ...
}

查看线程活跃数:

@Autowired
 private ThreadPoolTaskExecutor threadPoolA;//变量名称为定义的线程池bean定义的name属性名。

public void checkAvtiveThreadNum() {
  int num = threadPoolA.getActiveCount();
}

当然还有其他一些方法,这里不再举例。

线程池各属性理解:

corePoolSize:表示线程池核心线程,正常情况下开启的线程数量。

queueCapacity:当核心线程都在跑任务,还有多余的任务会存到此处。

maxPoolSize:如果queueCapacity存满了,还有任务就会启动更多的线程,直到线程数达到maxPoolSize。如果还有任务,则根据拒绝策略进行处理。

拒绝策略有多种:

  1. 由任务调用线程执行
  2. 抛异常
  3. 多余的直接抛弃
  4. 根据FIFO(先进先出)抛弃队列里任务

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java 配置MyEclipse Maven环境具体实现步骤

    java 配置MyEclipse Maven环境具体实现步骤

    这篇文章主要介绍了 java 配置MyEclipse Maven环境具体实现步骤的相关资料,具有一定的参考价值,需要的朋友可以参考下
    2016-11-11
  • java Socket实现多人群聊与私聊功能

    java Socket实现多人群聊与私聊功能

    这篇文章主要为大家详细介绍了java Socket实现多人群聊与私聊功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Java中synchronized的几种使用方法

    Java中synchronized的几种使用方法

    本文主要介绍了Java中synchronized的几种使用方法,synchronized可用于修饰普通方法、静态方法和代码块,下面详细内容介绍,需要的小伙伴可以参考一下
    2022-05-05
  • Java实战之制作在线音乐网站

    Java实战之制作在线音乐网站

    这篇文章主要介绍了如何通过Java实现一个精美风的在线音乐网站,文章采用到了JSP、JQuery、Ajax等技术,感兴趣的小伙伴可以了解一下
    2022-02-02
  • SpringBoot+JWT实现单点登录完美解决方案

    SpringBoot+JWT实现单点登录完美解决方案

    单点登录是一种统一认证和授权机制,指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的系统,不需要重新登录验证,这篇文章主要介绍了SpringBoot+JWT实现单点登录解决方案,需要的朋友可以参考下
    2023-07-07
  • java字符串相加时的内存表现和原理分析

    java字符串相加时的内存表现和原理分析

    这篇文章主要介绍了java字符串相加时的内存表现和原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java 中 synchronized的用法详解(四种用法)

    Java 中 synchronized的用法详解(四种用法)

    Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。本文给大家介绍java中 synchronized的用法,对本文感兴趣的朋友一起看看吧
    2015-11-11
  • Java中的clone方法详解_动力节点Java学院整理

    Java中的clone方法详解_动力节点Java学院整理

    clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。下面通过本文给大家介绍java中的clone方法,感兴趣的朋友一起看看吧
    2017-06-06
  • Java建造者设计模式详解

    Java建造者设计模式详解

    这篇文章主要为大家详细介绍了Java建造者设计模式,对建造者设计模式进行分析理解,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • Java集合之LinkedHashSet集合详解

    Java集合之LinkedHashSet集合详解

    这篇文章主要介绍了Java集合之LinkedHashSet集合详解,具有可预知迭代顺序的Set接口的哈希表和链表列表实现,此实现与HashSet不同的是,后者维护着一个运行于所有条目的双重链表列表,此链表定义了迭代顺序,需要的朋友可以参考下
    2023-09-09

最新评论