线程池类图如下:

使用Executors工具类创建的线程池,都是创建的ThreadPoolExecutor对象。这个对象的核心参数有7个:

1、corePoolSize 核心线程数,即便线程空闲也会一直在线程池中的线程数,除非设置允许核心线程超时的参数。

2、maximumPoolSize 最大线程数 ,线程池中允许的最大线程,包含核心线程数

3、keepAliveTime 非核心线程空闲等待时间,超过这个时间没有任务的话,非核心线程会被从线程池中销毁。

4、TimeUnit keepAliveTime的时间单位

5、BlockingQueue 任务队列,用来缓存执行excute方法的Runnable任务

6、ThreadFactory 线程工厂 创建新线程时用的工厂

7、RejectedExecutionHandler 拒绝策略, 是当任务队列满了,线程池线程数也达到最大了,这个时候,又有任务要执行的时候,执行什么策略进行处理这些任务。有四种策略

7.1) AbortPolicy: 中止策略(默认) 直接抛出RejectedExecutionException异常

7.2) DiscardPolicy: 丢弃策略 啥都不做,直接丢掉这个任务

7.3) DiscardOldestPolicy: 丢弃最早的未处理的任务策略 会丢掉最早未执行的任务,然后重试当前这个任务

7.4) CallerRunsPolicy: 调用者执行策略 如果executor没有关闭,会在执行execute方法的线程中直接调用任务的run方法。如果executor关闭了,这个任务就会被丢弃不执行。

任务与线程执行分配的过程:

线程池里面有线程、任务队列和Worker组成,线程分为核心线程和非核心线程。

当有任务过来的时候,首先核心线程会执行任务。

当核心线程都在执行任务的时候,新来的任务会进入任务队列。

当任务队列满了的时候, 根据线程池最大线程数,创建非核心线程来处理任务。

当所有线程都在执行任务,并且任务队列都满了的时候,新来的任务会按执行拒绝策略。

Worker我理解的是个协调调度者,当任务来的时候他负责调度线程执行任务,添加worker的时候可以指定是核心线程还是非核心线程。Worker实现了AQS和Runnable接口。

ThreadPoolExecutor线程池及参数介绍相关推荐

  1. ThreadPoolExecutor线程池核心参数详解

    理解ThreadPoolExecutor线程池的corePoolSize.maximumPoolSize和poolSize 我们知道,受限于硬件.内存和性能,我们不可能无限制的创建任意数量的线程,因为 ...

  2. ThreadPoolExecutor(线程池)的参数

    构造函数 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit u ...

  3. 【Java 并发编程】线程池机制 ( ThreadPoolExecutor 线程池构造参数分析 | 核心线程数 | 最大线程数 | 非核心线程存活时间 | 任务阻塞队列 )

    文章目录 前言 一.ThreadPoolExecutor 构造参数 二.newCachedThreadPool 参数分析 三.newFixedThreadPool 参数分析 四.newSingleTh ...

  4. 多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目

    阿里的面试官问了个问题,如果corepollSize=10,MaxPollSize=20,如果来了25个线程 怎么办, 答案: 当一个任务通过execute(Runnable)方法欲添加到线程池时: ...

  5. Java 线程池及参数动态调节详解

    前前言:本文搬自:why技术 前言:曾经自诩对线程池了如指掌,不料看了美团的一篇技术文章后才知道原来线程池的参数还可以动态调节. 经典面试题 在这篇文章中我主要回答上面抛出的这个问题:你这几个参数的值 ...

  6. java 动态线程池_线程池的参数动态调整

    经典面试题 这次的文章还是绕回了我写的第三篇原创文章<有的线程它死了,于是它变成一道面试题>中留下的几个问题: 哎,兜兜转转,走走停停.天道好轮回,苍天饶过谁? 在这篇文章中我主要回答上面 ...

  7. Java Executor源码解析(3)—ThreadPoolExecutor线程池execute核心方法源码【一万字】

    基于JDK1.8详细介绍了ThreadPoolExecutor线程池的execute方法源码! 上一篇文章中,我们介绍了:Java Executor源码解析(2)-ThreadPoolExecutor ...

  8. Java线程池七大参数详解和配置

    目录 一.corePoolSize核心线程数 二.maximunPoolSize最大线程数 三.keepAliveTime空闲线程存活时间 四.unit空闲线程存活时间的单位 五.workQueue线 ...

  9. ThreadPoolExecutor线程池原理

    ThreadPoolExecutor线程池原理 线程池原理 1. 线程池的简单介绍 1.1 线程池是什么 1.2 线程池解决的核心问题是什么 2. 线程池的实现原理 2.1 线程池的执行流程 2.2 ...

最新文章

  1. Replication--镜像+复制
  2. 6.15 Unity引擎渲染效率全解析
  3. oracle列,oracle列合并
  4. .Net微信开发之通过UnionID机制,解决用户在不同公众号,或在公众号、移动应用之间帐号统一问题...
  5. Little Sub and Balloons
  6. 地图按照自己规定路线进行移动
  7. java(6)——+号和++号--号
  8. Spring中三种配置Bean的方式
  9. 网页特效offset、client、scroll系列属性的作用
  10. stap监控IO脚本
  11. linux启动盘恢复成普通U盘,u盘启动盘还原普通u盘win10 制作
  12. 百度指数python爬虫的简单应用
  13. E-R图(实体-联系图)
  14. 【心电信号】基于matlab心率检测【含Matlab源码 1993期】
  15. C语言零基础项目:打字母游戏!详细思路+源码分享
  16. Android如何实现音频合成
  17. CCPC-Wannafly Comet OJ 夏季欢乐赛(2019)A——完全k叉树
  18. Linux系统常用命令:CentOS,RedHat包的安装和卸载
  19. 基于51单片机GPS定位系统设LCD12864显示(程序+原理图+PCB+论文)
  20. 实验7-3-7 字符转换 (15 分)

热门文章

  1. 天嵌i.mx6q--1
  2. 单页双曲面 matlab,生成平面截单叶双曲面的gif动画的程序
  3. Latex的Visual Studio Code+SumatraPDF环境配置(自用)
  4. JS中的click事件无反应
  5. Spring实战学习笔记
  6. 月入3万,个人博客的暴利赚钱套路分享!
  7. LibreOJ10155 数字变换 ------ 树形dp
  8. Vladik and fractions
  9. 自动驾驶平台Apollo 5.5阅读手记:Cyber RT中的任务调度
  10. 一本书读懂财报 | 资产负债表剖析