highlight: androidstudio
ThreadPoolExecutor参数以及原理图解
参数释义
corePoolSize,
控制核心线程池的大小
maximumPoolSize
线程池最大线程数量
keepAliveTime
当某个线程超过生存时间(没任务待执行)后则会回归还操作系统;
TimeUnit.SECONDS
keepAliveTime 的单位;
BlockingQueue
任务队列,用于存放Runnable即任务
ThreadFactory
用于创建线程,以及指定线程的前缀(一般用于定位问题)和group以及是否为守护线程(优先级最低的,默认是非守护线程)
``` 什么是守护线程???
有时候,你希望创建一个线程来执行一些辅助工作,但又不希望这个线程阻碍 JVM 的关闭。 在这种情况下就需要使用守护线程( Daemon Thread )。 线程可分为两种:普通线程和守护线程。在 JVM 启动时创建的所有线程中, 除了主线程以外,其他的线程都是守护线程(例如垃圾回收器以及其他执行辅助工作的线程)。 当创建一个新线程时,新线程将继承创建它的线程的守护状态,因此在默认情况下,主线程创建的所有线程都是普通线程。 普通线程与守护线程之间的差异仅在于当线程退出时发生的操作。当一个线程退出时, JVM 会检查其他正在运行的线程,如果这些线程都是守护线程,那么 JVM 会正常退出操作。 当 JVM 停止时,所有仍然存在的守护线程都将被抛弃, 且不会执行 finally 代码块,JVM 将直接退出。 我们应尽可能少地使用守护线程 ― 很少有操作能够在不进行清理的情况下被安全地抛弃。特别是, 如果在守护线程中执行可能包含 I/O操作的任务, 那么将是一种危险的行为。守护线程最好用于执行“内部”任务, 例如周期性地从内存的缓存中移除逾期的数据。
```
拒绝策略
拒绝策略 ,当线程池满了的时候,使用的拒绝方式,具体见下图中
一张图带你走进ThreadPoolExecutor的世界
下面我们看下jdk中已经为我们定义好的线程池工具类 Executors
,他其实也是各种 new ThreadPoolExecutor(); 只不过细分了一下。
Executors框架提供的几种线程池简介
在介绍前 有必要了解下java中的阻塞队列
</