Java多线程中线程池常见7个参数的详解以及执行流程

 更新时间:2023年07月26日 15:24:36   作者:健康平安的活着  
本文主要介绍了Java多线程中线程池常见7个参数的详解以及执行流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一 线程池常见参数

1.1 概念

1.2 7个参数说明 

7个参数:

int corePoolSize, 常驻线程数量(核心)
int maximumPoolSize,最大线程数量
long keepAliveTime,TimeUnit unit,线程存活时间
BlockingQueue<Runnable> workQueue,阻塞队列(排队的线程放入)
ThreadFactory threadFactory,线程工厂,用于创建线程
RejectedExecutionHandler handler拒绝策略(线程满了)

1.3 coresize和maxsize,poolsize

1.corePoolSize

线程池的核心线程数量,线程池的基本大小,即在没有任务需要执行的时候线程池的大小并且只有在工作队列满了的情况下才会创建超出这个数量的线程

2.maximumPoolSize

线程池中允许的最大线程数

3.poolSize

线程池中当前线程的数量

3者之间的关系:

新提交一个任务时的处理流程很明显:

1、如果当前线程池的线程数还没有达到核心线程数(poolSize < corePoolSize),无论是否有空闲的线程,都新增一个线程处理新提交的任务;

2、如果当前线程池的线程数大于或等于核心线程数(poolSize >= corePoolSize) 且任务队列未满时,就将新提交的任务提交到阻塞队列排队,等候处理workQueue.offer(command);

3、如果当前线程池的线程数大于或等于核心线程数(poolSize >= corePoolSize) 且任务队列满时

3.1、当前poolSize<maximumPoolSize,那么就新增线程来处理任务;

3.2、当前poolSize>=maximumPoolSize,那么意味着线程池的处理能力已经达到了极限,此时需要拒绝新增加的任务。至于如何拒绝处理新增的任务,取决于线程池的饱和策略RejectedExecutionHandler。

1.4 newFixedThreadPool

newFixedThreadPool中设定的线程数是核心线程数,还是最大线程数,开源代码如下:

 底层继续查看 new  ThreadPoolExecutor的源代码

通过查看源码:答案是:核心线程数和最大线程数都设置成了定义的线程数量。

到此这篇关于Java多线程中线程池常见7个参数的详解以及执行流程的文章就介绍到这了,更多相关Java 线程池参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MyBatis使用resultMap如何解决列名和属性名不一致

    MyBatis使用resultMap如何解决列名和属性名不一致

    这篇文章主要介绍了MyBatis使用resultMap如何解决列名和属性名不一致的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 浅谈常用字符串与集合类转换的工具类

    浅谈常用字符串与集合类转换的工具类

    下面小编就为大家带来一篇浅谈常用字符串与集合类转换的工具类。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • IDEA下从零开始搭建SpringBoot工程的方法步骤

    IDEA下从零开始搭建SpringBoot工程的方法步骤

    这篇文章主要介绍了IDEA下从零开始搭建SpringBoot工程的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Java 使用线程池执行多个任务的示例

    Java 使用线程池执行多个任务的示例

    这篇文章主要介绍了Java 使用线程池执行多个任务的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下
    2021-03-03
  • mybatis plus 自动转驼峰配置小结

    mybatis plus 自动转驼峰配置小结

    SpringBoot提供两种配置Mybatis的方式,第一种是通过yml或application.properties文件开启配置,第二种是使用自定义配置类,通过给容器添加一个ConfigurationCustomizer来实现更灵活的配置,这两种方法可以根据项目需求和个人喜好选择使用
    2024-10-10
  • Java Playwright实现浏览器最大化

    Java Playwright实现浏览器最大化

    Playwright 是一个用于自动化 Web 应用测试的现代工具,支持多种语言(包括 Java)及多个浏览器,本文主要介绍了Java如何使用Playwright实现浏览器最大化,需要的可以参考下
    2024-12-12
  • Java设计模式之java观察者模式详解

    Java设计模式之java观察者模式详解

    这篇文章主要介绍了Java经典设计模式之观察者模式,简单分析了观察者模式的概念、原理并结合实例形式给出了java观察者模式的具体用法与相关注意事项,需要的朋友可以参考下
    2021-09-09
  • java Struts2框架下实现文件上传功能

    java Struts2框架下实现文件上传功能

    这篇文章主要为大家详细介绍了java Struts2框架下实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • idea perttier的使用和缩进改为4不成功问题及解决

    idea perttier的使用和缩进改为4不成功问题及解决

    这篇文章主要介绍了idea perttier的使用和缩进改为4不成功问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Spring @Scheduler使用cron表达式时的执行问题详解

    Spring @Scheduler使用cron表达式时的执行问题详解

    Spring给程序猿们带来了许多便利。下面这篇文章主要给大家介绍了关于Spring @Scheduler使用cron表达式时的执行问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09

最新评论