耐心是一切聪明才智的基础。
什么是线程池? 为什么要使用它?
-
线程复用
避免线程的创建销毁的系统开销 - 线程数量控制 避免线程不断膨胀 导致系统崩溃
- 任务管理 任务 异步执行
核心参数
-
核心线程数
prestartAllCoreThreads 可以在初始化时候全部创建。 -
最大线程数
和核心数一致 时线程数量固定 存活时间没有意义 闲置线程存活时间
时间单位
-
线程队列
-
直接队列
SynchronousQueue 跟没有一样。。 -
无限队列
LinkedBlockingQueue 可指定也可不指定。 -
有限队列
ArrayBlockingQueue 初始化指定大小。 -
延迟队列
DelayQueue,根据aqs.reentranlock.condition实现的await,signal机制实现。
-
线程工厂
-
拒绝策略
- 丢弃&异常(主线程停止)
- 丢弃&不抛异常
- 丢弃队列中任务,重试
- 重试,不断重试
任务的执行流程
image.png有哪些状态
https://www.jianshu.com/p/c22fa33a4213
有意思的实现
- 一个变量代表多个意思
线程池 用线程安全atomicInteger ctl
来表示
线程池的状态 以及 线程的数量
高3位保存runState
,低29位保存workerCount
网友评论