一、ThreadPoolExecutor核心参数说明

    1、corePoolSize:核心线程数* 核心线程会一直存活,及时没有任务需要执行* 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理* 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭2、queueCapacity:任务队列容量(阻塞队列)* 当核心线程数达到最大时,新任务会放在队列中排队等待执行3、maxPoolSize:最大线程数* 当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务* 当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常4、 keepAliveTime:线程空闲时间* 当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize* 如果allowCoreThreadTimeout=true,则会直到线程数量=05、allowCoreThreadTimeout:允许核心线程超时6、rejectedExecutionHandler:任务拒绝处理器* 两种情况会拒绝处理任务:- 当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务- 当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。如果在调用shutdown()和线程池真正shutdown之间提交任务,会拒绝新任务* 线程池会调用rejectedExecutionHandler来处理这个任务。如果没有设置默认是AbortPolicy,会抛出异常* ThreadPoolExecutor类有几个内部实现类来处理这类情况:- AbortPolicy 丢弃任务,抛运行时异常- CallerRunsPolicy 执行任务- DiscardPolicy 忽视,什么都不会发生- DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务* 实现RejectedExecutionHandler接口,可自定义处理器

二、ThreadPoolExecutor执行顺序

    线程池按以下行为执行任务1. 当线程数小于核心线程数时,创建线程。2. 当线程数大于等于核心线程数,且任务队列未满时,将任务放入任务队列。3. 当线程数大于等于核心线程数,且任务队列已满-1 若线程数小于最大线程数,创建线程-2 若线程数等于最大线程数,抛出异常,拒绝任务

三、ThreadPoolExecutor如何设置参数

    1、默认值* corePoolSize=1* queueCapacity=Integer.MAX_VALUE* maxPoolSize=Integer.MAX_VALUE* keepAliveTime=60s* allowCoreThreadTimeout=false* rejectedExecutionHandler=AbortPolicy()2、如何来设置* 需要根据几个值来决定- tasks :每秒的任务数,假设为1000- taskcost:每个任务花费时间,假设为0.1s- responsetime:系统允许容忍的最大响应时间,假设为1s* 做几个计算- corePoolSize = 每秒需要多少个线程处理? * 一颗CPU核心同一时刻只能执行一个线程,然后操作系统切换上下文,核心开始执行另一个线程的代码,以此类推,超过cpu核心数,就会放入队列,如果队列也满了,就另起一个新的线程执行,所有推荐:corePoolSize = ((cpu核心数 * 2) + 有效磁盘数),java可以使用Runtime.getRuntime().availableProcessors()获取cpu核心数- queueCapacity = (coreSizePool/taskcost)*responsetime* 计算可得 queueCapacity = corePoolSize/0.1*1。意思是队列里的线程可以等待1s,超过了的需要新开线程来执行* 切记不能设置为Integer.MAX_VALUE,这样队列会很大,线程数只会保持在corePoolSize大小,当任务陡增时,不能新开线程来执行,响应时间会随之陡增。- maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost)* 计算可得 maxPoolSize = (1000-corePoolSize)/10,即(每秒并发数-corePoolSize大小) / 10* (最大任务数-队列容量)/每个线程每秒处理能力 = 最大线程数- rejectedExecutionHandler:根据具体情况来决定,任务不重要可丢弃,任务重要则要利用一些缓冲机制来处理- keepAliveTime和allowCoreThreadTimeout采用默认通常能满足

简单易懂,ThreadPoolExecutor参数说明相关推荐

  1. LeetCode—笔记—51、N皇后——递归回溯,个人思路,简单易懂

    LeetCode-笔记-51.N皇后--递归回溯,个人思路,简单易懂 51. N 皇后 n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 给你一个整数 ...

  2. 【转】JS回调函数--简单易懂有实例

    JS回调函数--简单易懂有实例 初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数. 我们先来看看回调的英文定义:A callback is a function that is ...

  3. BTC:简单易懂比特币之比特币的神奇——区块链技术的体现

    BTC:简单易懂比特币之比特币的神奇--区块链技术的体现 目录 BTC的七大特殊之处 BTC的七大特殊之处 1.一个没有CEO的公司,管理几十万员工: 2.每个员工自私自利,争权夺利,公司运作9年风生 ...

  4. python如何安装panda数据库_在Pycharm中安装Pandas库方法(简单易懂)

    开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍.Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且 ...

  5. 一、css清除浮动方法学习笔记总结(超详细,简单易懂)

    ** css清除浮动方法学习笔记总结(超详细,简单易懂) ** 问题: 上图中,由于container(父级元素)未设置高度,其内部子元素设置了float浮动,导致与container同级(也就是co ...

  6. 机器学习经典算法决策树原理详解(简单易懂)

    ↑ 点击上方[计算机视觉联盟]关注我们 最经典的决策树算法有ID3.C4.5.CART,其中ID3算法是最早被提出的,它可以处理离散属性样本的分类,C4.5和CART算法则可以处理更加复杂的分类问题, ...

  7. 公式太多,读不懂? 一文带你领略KNN近邻算法~简单易懂

    ↑ 点击上方[计算机视觉联盟]关注我们 K近邻算法采用测量不同特征值之间的距离方法进行分类. K-近邻算法工作原理: 存在一个样本数据集合,也称作训练样本集,并且样本集中的每个数据都存在标签,即我们知 ...

  8. JavaScript面向对象--继承 (超简单易懂,小白专属)...

    JavaScript面向对象--继承 (超简单易懂,小白专属) 一.继承的概念 子类共享父类的数据和方法的行为,就叫继承. 二.E55如何实现继承?探索JavaScript继承的本质 2.1构造函数之 ...

  9. CodeBlocks配色方案设置(简单易懂)

    CodeBlocks配色方案设置(简单易懂) 最终成品 方法 ​ 1.首先进入codeblocks官网找到colour theme代码. ​ 直接点链接: codeblock wiki 从以上截图往下 ...

  10. C语言:简易商品库存管理系统(简单易懂,不用指针的入门级示例,数据结构大作业)

    C语言:商品库存管理系统(简单易懂,不用指针的入门级示例) 没有使用指针,没有写入文件,全部是最基础的c语言语句,本程序使用vc6.0测试 功能: 1.创建商品的信息 2.显示全部商品对信息(商品数量 ...

最新文章

  1. 浓缩精华的架构演进过程,我连看了六遍!
  2. python3.0安卓版-qPython 3h下载
  3. php调用其它控制器,TP框架控制器里面怎么调用另一个控制器的代码
  4. springboot-springSecurity 之 http Basic认证 (四)
  5. MySql :Could not create connection to database server.
  6. java sqlite busy_使用select语句锁定[SQLITE_BUSY]数据库文件
  7. Linux 命令(111)—— alias 命令(builtin)
  8. JavaScript对滚动条的操作
  9. ZStack GPU解决方案
  10. DAMS峰会丨从数仓到数据中台,从数据资源到资产,京东、携程、快手等是怎么建设和演进的?...
  11. JS怎么唤醒高德导航
  12. Android studio使用SVN
  13. Self-Attention详解
  14. Spring MVC参数化测试 - Junit Parameterized
  15. 安卓8.0-MT6763平台 st7701s-MIPI转RGB屏调试
  16. 【uni-app学习】uni-app低功耗蓝牙采坑记录
  17. 单点登录、域用户、常规登录、AD域
  18. 图文结合,手把手教你ubuntu18-live-server-amd64服务器版的安装、配置静态ip以及换源
  19. python音标1003python音标_python selenium 爬取百度翻译单词音标
  20. LeetCode算法题解 414-第三大的数

热门文章

  1. Gh0st源码学习(二)去除硬盘锁和驱动
  2. 海量数据处理(二) :常见海量数据处理方法
  3. IP地址分类及CIDR划分方法
  4. 好文|张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
  5. Kafka分区分配策略(3)——自定义分区分配策略
  6. Windows使用opencv训练模型过程记录(提供样本)
  7. 大话ion系列(一)
  8. URL2Video:把网页自动创建为短视频
  9. 容联CTO许志强:AI、5G让通讯更智能、更高效
  10. Java多线程之CAS缺点