没有合适的资源?快使用搜索试试~ 我知道了~
前言多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程的利器。Java 通过 Executor
资源详情
资源评论
资源推荐
文章目录
1.
前言
2.
生命周期
3.
线程池模型
3.1.
核心参数
3.2.
四种模型
4.
执行任务 execute
5.
拒绝策略
6.
线程池中的 Worker
6.1.
核心函数 runWorker
7.
获取任务 getTask
8.
总结
Java 线程池框架核心代码分析
前言
多线程编程中,为每个任务分配一个线程是不现实的,线程创建的
开销和资源消耗都是很高的。线程池应运而生,成为我们管理线程
的利器。Java 通过
Executor
Executor
接口,提供了一种标准的方法将任务
的提交过程和执行过程解耦开来,并用
Runnable
Runnable
表示任务。
下面,我们来分析一下 Java 线程池框架的实现
ThreadPoolExecutor
ThreadPoolExecutor
。
下面的分析基于
JDK1.7
生命周期
ThreadPoolExecutor
ThreadPoolExecutor
中,使用
CAPACITY
CAPACITY
的高3位来表示运行状态,分别是:
RUNNING:接收新任务,并且处理任务队列中的任务
1.
SHUTDOWN:不接收新任务,但是处理任务队列的任务
2.
STOP:不接收新任务,不处理任务队列,同时中断所有进行中的任务
3.
TIDYING:所有任务已经被终止,工作线程数量为 0,到达该状态会执行
terminated()
terminated()
4.
TERMINATED:
terminated()
terminated()
执行完毕
5.
ThreadPoolExecutor
ThreadPoolExecutor
中用原子类来表示状态位
private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING, 0));
线程池模型
核心参数
corePoolSize
corePoolSize
:最小存活的工作线程数量(如果设置
allowCoreThreadTimeOut
allowCoreThreadTimeOut
,那么该值
为 0)
maximumPoolSize
maximumPoolSize
:最大的线程数量,受限于
CAPACITY
CAPACITY
keepAliveTime
keepAliveTime
:对应线程的存活时间,时间单位由TimeUnit指定
状态转换图
第1页 共4页
食色也
- 粉丝: 27
- 资源: 351
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0