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 线程池参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot 添加JSP 支持并附带在IDEA下创建JSP文件【测试无误】
这篇文章主要介绍了SpringBoot 添加JSP 支持并附带在IDEA下创建JSP文件的相关知识,感兴趣的朋友跟随脚本之家小编一起学习吧2018-05-05spring boot项目使用@JsonFormat失效问题的解决
这篇文章主要介绍了spring boot项目使用@JsonFormat失效问题的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11Spring中的拦截器HandlerInterceptor详细解析
这篇文章主要介绍了Spring中的拦截器HandlerInterceptor详细解析,HandlerInterceptor 是 Spring 框架提供的一个拦截器接口,用于在请求处理过程中拦截和处理请求,需要的朋友可以参考下2024-01-01Java多线程程序中synchronized修饰方法的使用实例
synchronized关键字主要北用来进行线程同步,这里我们主要来演示Java多线程程序中synchronized修饰方法的使用实例,需要的朋友可以参考下:2016-06-06Java 最重要布局管理器GridBagLayout的使用方法
GridBagLayout是java里面最重要的布局管理器之一,可以做出很复杂的布局,可以说GridBagLayout是必须要学好的的,需要的朋友可以了解下2012-12-12
最新评论