ThreadPoolExecutor线程池
时间:2021-09-05
本文章向大家介绍ThreadPoolExecutor线程池,主要包括ThreadPoolExecutor线程池使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
ThreadPoolExecutor是阿里推荐使用的线程池工具,主要是为了更方便控制参数,不推荐Executors创建线程池是因为容易内存溢出(OOM)
部分源码:
public ThreadPoolExecutor(int corePoolSize, // 核心线程数
int maximumPoolSize, // 最大线程数
long keepAliveTime, // 非核心线程最大空闲时间
TimeUnit unit, // 时间单位
BlockingQueue<Runnable> workQueue, // 工作线程队列, 其长度不是固定的, 根据线程数相关参数计算而来
ThreadFactory threadFactory, // 创建线程的工厂
RejectedExecutionHandler handler) { // 拒绝策略
// ...
}
线程池管理线程的好处在于可以节约创建和销毁线程的时间,因此线程池更适合用在任务执行时间短且任务数量大的场景。
提交任务:
public void execute(); //提交任务无返回值
public Future<?> submit(); //任务执行完成后有返回值
监控线程池:
public long getTaskCount(); //线程池已执行与未执行的任务总数
public long getCompletedTaskCount(); //已完成的任务数
public int getPoolSize(); //线程池当前的线程数
public int getActiveCount(); //线程池中正在执行任务的线程数量
ThreadPoolExecutor的工作原理:
- 在核心线程数未达到
corePoolSize
时,优先创建核心线程,而不是复用线程 - 核心线程全部创建的情况下,如果线程池无法及时处理提交的任务,优先将任务放入
WorkQueue
排队等待,而不是创建非核心线程 - 当核心线程达到
corePoolSize
且WorkQueue
队列已满,线程池开始创建非核心线程 - 如果程序提交的任务完全超过线程池的处理能力(线程数达
maximumPoolSize
且WordQueue
满),会触发线程池的拒绝策略
拒绝策略:
AbortPolicy
(default): 抛出异常RejectedExecutionException
CallerRunsPolicy
: 该任务交由提交任务的线程执行DiscardOldestPolicy
: 丢弃老的任务,即队列头部任务,不会抛异常DiscardPolicy
: 丢弃要提交的任务,不会抛异常
原文地址:https://www.cnblogs.com/farwalking/p/15228827.html
- SQL学习之汇总数据之聚集函数
- Sedo榜单中,域名“加密世界”CryptoWorld.com七位数夺冠
- ExtJs学习笔记(20)-利用ExtJs的Ajax与服务端WCF交互
- 2018年热点分享:比特币到底是什么?
- JVM快速入门
- SQL学习之使用常用函数处理数据
- Javascript快速入门(上篇)
- SQL练习之不反复执行相同的计算
- SQL练习之求解填字游戏
- 快速入门系列--WCF--08扩展与新特性
- SQL练习之两个列值的交换
- Parcel,零配置开发 React 应用!
- 像 React Native 开发 APP 一样,用wn-cli 开发 weapp (微信小程序)
- 正则表达式快速入门
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法