初探线程池
时间:2022-07-22
本文章向大家介绍初探线程池,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
线程池,顾名思义管理一系列线程的资源池。
与传统的为每一个任务分配一个线程相比,线程池有以下几个优势:
1)其通过重用现有的线程而不是额外创建线程,在处理多个任务时可以分摊线程的创建、销毁开销;
2)由于对于新来的某些任务不需要创建新线程,提高了响应速度
3)线程是一种稀有资源,无休止的创建除了会引发资源耗尽的问题外还会导致资源调度失衡,使用线程池可以便于管理与调度
4)线程池还具有可扩展性,例如ScheduledThreadPool可以定时/延期执行某些任务。
线程池总体架构
线程池内部如下图所示,
上图来自:https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
ThreadPoolExecutor可以分为两部分,任务管理和线程管理。两者之间存在生产者、消费者的关系,任务管理扮演生产者的角色,其将任务放置于任务队列中,而线程管理扮演的是一个消费者的角色,其总是从任务队列中获取任务并交给其手下的一位线程。
此外需要说明的是线程池中的corePool为线程池的基本大小,没有任务需要执行时线程池的大小
线程池的生命周期
如下为线程池内部状态信息,其使用一个AtomicInteger对象,高三位存储当前状态,低29位存储池中线程的数目
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
// runState is stored in the high-order bits
private static final int RUNNING = -1 << COUNT_BITS;
private static final int SHUTDOWN = 0 << COUNT_BITS;
private static final int STOP = 1 << COUNT_BITS;
private static final int TIDYING = 2 << COUNT_BITS;
private static final int TERMINATED = 3 << COUNT_BITS;
- 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 数组属性和方法